繁体   English   中英

pandas.read_csv中的skiprows参数是否接受可调用函数?

[英]Does skiprows parameter in pandas.read_csv accepts a callable function?

我阅读了有关read_csv函数的熊猫文档,并说它可以接受skiprows参数的可调用函数。

他们在此处( https://pandas.pydata.org/pandas-docs/stable/genic/pandas.read_csv.html )列出了可以使用lambda表达式的地方。 但是,当我尝试实现它时,我收到此错误:

ValueError:索引名称无效

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

为何有任何猜测?

谢谢

PS。 csv中数据结构的打印屏幕。 在此处输入图片说明

正在发生的事情是skiprows = lambda x : x in [0, 2]index_col=['Name', 'ID']

文件的第一行包含列名,但是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"""

这个:

df = pd.read_csv(pd.compat.StringIO(temp), sep=";", index_col=[0, 1], skiprows= [0, 2])

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

证明:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM