簡體   English   中英

將多個csv文件讀入Pandas數據框

[英]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()會使用正確的列名稱:

導入單個CSV的輸出

雖然運行相同的四個文件導入給我這個:

導入4個CSV文件的輸出(右側裁剪)

有什么明顯的我正在做的事情不僅會導致行數增長而且會導致列數增加嗎?

非常感謝您的指導!

它當前不起作用的原因是當你在第一個文件之后對每個文件執行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM