如何將DataFrame數(shù)據(jù)寫入csv文件及讀取
一、saveData函數(shù)
import csv def saveData(filePath, data): with open(filePath, 'w+', newline='') as f: writer = csv.writer(f) for row in data: writer.writerow(row)
如果data是一個(gè)list,saveData函數(shù)會(huì)將list中的每個(gè)元素保存在csv文件中的一行。
但是存在一個(gè)問(wèn)題:
csv文件中保存的數(shù)據(jù)如果直接讀取出來(lái)是str類型,需要進(jìn)行轉(zhuǎn)換
二、將DataFrame寫入csv文件
情況1
將list寫入csv文件
init_configs = [] for i, cluster in enumerate(clusters): init_configs.append([f"cluster {i}:"]) for _, row in cluster.iterrows(): config = row.tolist() init_configs.append(config) saveData('filePath', init_configs)
config = row.tolist()會(huì)將df中每一行數(shù)據(jù)都轉(zhuǎn)變?yōu)閘ist,然后append到init_configs中,通過(guò)調(diào)用saveData函數(shù)可以將每一行數(shù)據(jù)表示的list都寫到csv文件中的一行。
這種情況生成的csv文件中每一行的各個(gè)元素之間都是用逗號(hào)隔開。
情況2
將嵌套list寫入csv文件
init_configs = [] for i, cluster in enumerate(clusters): init_configs.append([f"cluster {i}:"]) for _, row in cluster.iterrows(): config = row.tolist() init_configs.append([config]) saveData('filePath', init_configs)
這種情況下init_configs中每個(gè)元素是一個(gè)二維list,由于CSV 文件是一種純文本格式,它無(wú)法直接存儲(chǔ)列表或其他復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
當(dāng)嘗試將 [[1, 2, 3, 4, 5]]
這個(gè)二維嵌套list寫入CSV文件時(shí),它會(huì)被自動(dòng)轉(zhuǎn)換為字符串形式。
如下:
三、讀取csv文件
情況1
如果按照上面的方法1寫csv文件,可以按照如下方式將內(nèi)容讀出來(lái):
import pandas as pd with open(filePath, 'r') as f: lines = f.readlines() filtered_lines = [line for line in lines if not line.startswith('cluster')] configs = [] for line in filtered_lines: config = [int(x) for x in line.strip().split(',')] configs.append(config) df = pd.DataFrame(configs)
可以用列表表達(dá)式的方式將csv文件中每一行的數(shù)據(jù)轉(zhuǎn)為一個(gè)list。
情況2
如果將整個(gè)list當(dāng)作字符串寫到了csv文件中,可以按照如下方式將內(nèi)容正確地讀出來(lái):
import pandas as pd import ast with open(filePath, 'r') as f: lines = f.readlines() filtered_lines = [line for line in lines if not line.startswith('cluster')] configs = [] for line in filtered_lines: config = ast.literal_eval(eval(line)) configs.append(config) df = pd.DataFrame(configs)
通過(guò)config = ast.literal_eval(eval(line))可以將變?yōu)樽址膌ist還原成原本的數(shù)據(jù)形式。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)同時(shí)對(duì)數(shù)據(jù)做轉(zhuǎn)換和換算處理操作示例
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)同時(shí)對(duì)數(shù)據(jù)做轉(zhuǎn)換和換算處理操作,涉及Python使用生成器表達(dá)式進(jìn)行數(shù)據(jù)處理的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03python dataframe列應(yīng)用正則表達(dá)式篩選方式
這篇文章主要介紹了python dataframe列應(yīng)用正則表達(dá)式篩選方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02python 實(shí)現(xiàn)查詢Neo4j多節(jié)點(diǎn)的多層關(guān)系
今天小編就為大家分享一篇python 實(shí)現(xiàn)查詢Neo4j多節(jié)點(diǎn)的多層關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12python代碼如何實(shí)現(xiàn)余弦相似性計(jì)算
這篇文章主要介紹了python代碼如何實(shí)現(xiàn)余弦相似性計(jì)算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02python 創(chuàng)建一個(gè)保留重復(fù)值的列表的補(bǔ)碼
這篇文章主要介紹了python 創(chuàng)建一個(gè)保留重復(fù)值的列表的補(bǔ)碼的相關(guān)資料,需要的朋友可以參考下2018-10-10python中os.path.dirname(path)詳細(xì)解釋和使用示例
這篇文章主要介紹了python中os.path.dirname(path)詳細(xì)解釋和使用示例,os.path.dirname是一個(gè)Python函數(shù),用于獲取文件路徑的目錄部分,它通常與os.path.basename結(jié)合使用,以分離路徑中的目錄和文件名,需要的朋友可以參考下2025-03-03關(guān)于Python排序sort()函數(shù)和sorted()函數(shù)
這篇文章主要介紹了關(guān)于Python排序sort()函數(shù)和sorted()函數(shù),利用Python中的內(nèi)置函數(shù)去實(shí)現(xiàn)直接排序,需要的朋友可以參考下2023-04-04