skiprows参数是否在Pandas.read_csv接受可调用函数?

2024-05-08 18:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我阅读了pandas文档中read_csv函数,它说它可以接受skiprows参数的可调用函数。在

他们在这里列出了可以使用lambda表达式的(https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)。但是,当我试图实现它时,我收到了一个错误:

值错误:索引名无效

编码

df = pd.read_csv('student_scores.csv', index_col=['Name', 'ID'], skiprows= (lambda x: x in [0, 2]))
df.head()

你猜为什么吗?在

谢谢

以csv格式打印数据结构的屏幕enter image description here


Tags: csvlambda函数文档httpsorgpandasdf
1条回答
网友
1楼 · 发布于 2024-05-08 18:25:24

所发生的是skiprows = lambda x : x in [0, 2]和{}效应的结合。在

文件中的第一行包含列名,但是skiprows = lambda x : x in [0, 2]使您跳过第一行(,它的索引为0)。这样,read_csv无法正确推断列名,当您指定index_col=['Name', 'ID']时,它将失败,因为它找不到任何具有该名称的列。在

注意:我使用@jezrael的示例文件作为csv:

temp=u"""Name;ID;val
X;A;100
Y;A;50.5
Z;A;60
E;B;90
F;B;45
G;C;100"""

这个:

^{pr2}$

之所以有效,是因为通过列的位置指定列,避免了名称问题。在

证明:

df = pd.read_csv(pd.compat.StringIO(temp), sep=";", index_col=[0, 1], skiprows= lambda x : x in [1, 2]) # works, not skipping column names' row

df = pd.read_csv(pd.compat.StringIO(temp), sep=";", names=['Name', 'ID', 'val'], index_col=[0, 1], skiprows= ['Name', 'ID']) # works (explicit column naming)

相关问题 更多 >