[英]Reading multiple csv files into a Pandas Data Frame
我試圖將多個CSV文件讀入Pandas數據框。 CSV不是逗號分隔 - 字段由分號“;”分隔。
我的代碼基於這里的答案。
我的數據都在一個特定的子目錄中: /data/luftdaten/5331
這是我運行的:
import glob
import pandas as pd
path =r'data/luftdaten/5331' # use your path
filenames = glob.glob(path + "/*.csv")
count_files = 0
dfs = []
for filename in filenames:
if count_files ==0:
dfs.append(pd.read_csv(filename, sep=";"))
count_files += 1
else:
dfs.append(pd.read_csv(filename, sep=";", skiprows=[0]))
count_files +=1
big_frame = pd.concat(dfs, ignore_index=True)
我使用count_files
監視它是否是第一個CSV - 在這種情況下我導入標題。 否則,它會跳過標題。
代碼執行正常。
如果我在該目錄中使用單個文件運行它,一切都很好:
big_frame.info()
輸出:
RangeIndex: 146 entries, 0 to 145 Data columns (**total 12 column**s): sensor_id 146 non-null int64 sensor_type 146 non-null object etc......
如果我在目錄中運行2個或更多文件,從一開始就出錯了。
輸出4個文件:
RangeIndex: 1893 entries, 0 to 1892 Data columns (total **33 columns**): -2.077 1164 non-null float64 -2.130 145 non-null float64 2.40 145 non-null float64
在單個CSV版本上運行big_frame.head()
會使用正確的列名稱:
雖然運行相同的四個文件導入給我這個:
有什么明顯的我正在做的事情不僅會導致行數增長而且會導致列數增加嗎?
非常感謝您的指導!
它當前不起作用的原因是當你在第一個文件之后對每個文件執行skiprows=[0]
,新數據框的第二個(索引1)行用作列標題。 因此,當幀連接時,有許多列標題不匹配。 如果你刪除skiprows=[0]
它應該工作。
假設您的所有文件都具有相同的標題(或者當它們不同時您可以使用NaN
),您應該可以在單行中執行此操作:
big_frame = pd.concat([pd.read_csv(f, sep=';') for f in glob.glob(path + "/*.csv")],
ignore_index=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.