[英]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()
为何有任何猜测?
谢谢
正在发生的事情是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.