簡體   English   中英

熊貓read_csv

[英]Pandas read_csv

這是我的代碼:

import os 
import pandas as pd

path = os.getcwd()
files = os.listdir(path)
df = pd.DataFrame()

for f in files:
    data = pd.read_csv(f, usecols = ['A','B','C','D','E'])
    df = df.append(data)

我得到了追溯:

  File "C:\Users\dbhadra\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1134, in _validate_usecols_names
    "columns expected but not found: {missing}".format(missing=missing)

ValueError: Usecols do not match columns, columns expected but not found: ['B', 'A', 'C', 'E', 'D']

我之前對read_excel使用了類似的命令,並且它可以正常工作。 我是否需要包含sep/engine參數? 我不明白為什么。 另外,我可以像在read_excel中一樣使用usecol = 'A:E'嗎? csv文件非常有用。 沒有技巧

在Excel中,您具有主列命名(AZ,AA-ZZ ...)。 在CSV中,您還沒有。 usecols是根據列標題(在第一行中)的列表。 如果CSV文件中沒有標題,則只需刪除usecols ,以后可以刪除這些列。 或者,您可以將列指定為整數(例如usecols=(1, 3, 7)而不是usecols=(A, C, F) 。如果有標題,請在usecols寫入其名稱。

usecols : list-like or callable, optional

返回列的子集。 如果是類列表,則所有元素必須是位置(即文檔列中的整數索引)或字符串,這些字符串與用戶提供的名稱或從文檔標題行推斷出的列名稱相對應。 例如,有效的類似列表的usecols參數將為[0, 1, 2]['foo', 'bar', 'baz'] 元素順序被忽略,因此usecols=[0, 1][1, 0] 實例化從與元件為了保存使用數據的數據幀pd.read_csv(data, usecols=['foo', 'bar'])[['foo', 'bar']]對於列['foo', 'bar']順序或pd.read_csv(data, usecols=['foo', 'bar'])[['bar', 'foo']]表示['bar', 'foo']順序。

如果是可調用的,則將針對列名稱評估可調用函數,並在可調用函數計算結果為True的情況下返回名稱。 有效的可調用參數的示例為['AAA', 'BBB', 'DDD'] lambda x: x.upper() 使用此參數可以大大加快解析時間並降低內存使用量。

比較pandas.read_csv和pandas.read_excel的文檔

對於read_csv()

secols:類似列表或可調用的列表,可選

返回列的子集。 如果是類列表,則所有元素必須是位置(即文檔列中的整數索引)或字符串,這些字符串與用戶提供的名稱或從文檔標題行推斷出的列名稱相對應。 例如,有效的類似列表的usecols參數將為[0,1,2]或['foo','bar','baz']

和為read_excel()

usecols:int,str,類似列表的或可調用的默認值None

返回列的子集。 *如果為None,則解析所有列。 *如果為int,則表示要解析的最后一列。

從版本0.24.0開始不推薦使用:傳遞int列表,而不是從0傳遞給usecols(包括)。

如果為str,則表示Excel列字母和列范圍的逗號分隔列表(例如“ A:E”或“ A,C,E:F”)。 范圍包括雙方。

如果為int列表,則表示要解析的列號列表。

如果是字符串列表,則表示要解析的列名稱列表。

因此,在您的情況下,傳遞標頭中的列名稱或整數列表(列索引)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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