如何將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是一個list,saveData函數(shù)會將list中的每個元素保存在csv文件中的一行。
但是存在一個問題:
csv文件中保存的數(shù)據(jù)如果直接讀取出來是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()會將df中每一行數(shù)據(jù)都轉(zhuǎn)變?yōu)閘ist,然后append到init_configs中,通過調(diào)用saveData函數(shù)可以將每一行數(shù)據(jù)表示的list都寫到csv文件中的一行。
這種情況生成的csv文件中每一行的各個元素之間都是用逗號隔開。
情況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中每個元素是一個二維list,由于CSV 文件是一種純文本格式,它無法直接存儲列表或其他復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
當(dāng)嘗試將 [[1, 2, 3, 4, 5]]
這個二維嵌套list寫入CSV文件時,它會被自動轉(zhuǎn)換為字符串形式。
如下:
三、讀取csv文件
情況1
如果按照上面的方法1寫csv文件,可以按照如下方式將內(nè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)為一個list。
情況2
如果將整個list當(dāng)作字符串寫到了csv文件中,可以按照如下方式將內(nè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)
通過config = ast.literal_eval(eval(line))可以將變?yōu)樽址膌ist還原成原本的數(shù)據(jù)形式。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)同時對數(shù)據(jù)做轉(zhuǎn)換和換算處理操作示例
這篇文章主要介紹了Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)同時對數(shù)據(jù)做轉(zhuǎn)換和換算處理操作,涉及Python使用生成器表達(dá)式進(jìn)行數(shù)據(jù)處理的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03python dataframe列應(yīng)用正則表達(dá)式篩選方式
這篇文章主要介紹了python dataframe列應(yīng)用正則表達(dá)式篩選方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02python 實現(xiàn)查詢Neo4j多節(jié)點的多層關(guān)系
今天小編就為大家分享一篇python 實現(xiàn)查詢Neo4j多節(jié)點的多層關(guān)系,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12python 創(chuàng)建一個保留重復(fù)值的列表的補(bǔ)碼
這篇文章主要介紹了python 創(chuàng)建一個保留重復(fù)值的列表的補(bǔ)碼的相關(guān)資料,需要的朋友可以參考下2018-10-10python中os.path.dirname(path)詳細(xì)解釋和使用示例
這篇文章主要介紹了python中os.path.dirname(path)詳細(xì)解釋和使用示例,os.path.dirname是一個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ù)去實現(xiàn)直接排序,需要的朋友可以參考下2023-04-04