为了账号安全,请及时绑定邮箱和手机立即绑定

从没有 Pandas 推断标题的 csv 中读取特定列

从没有 Pandas 推断标题的 csv 中读取特定列

精慕HU 2022-07-12 15:42:59
我正在尝试从pandas.read_csvJupyter Notebooks 中的 csv 文件中读取特定列。我知道我感兴趣的数据从哪一行开始,并使用skiprows关键字转到包含列标签的那一行。但是,即使我指定了要使用usecols的列,Pandas 也只会删除列中的值,而不是列本身。因此,如果我test.csv看起来像这样:*first 6 rows to be skipped*1,2,3,4,5,6a,b,c,d,e,fA,B,C,D,E,F片段(导入正确的模块后)df = pandas.read_csv('test.csv', skiprows = 5, usecols = np.r_[0, 2:7])给1,2,3,4,5,6a,nan,c,d,e,fA,nan,C,D,E,F而不是想要的1,3,4,5,6a,c,d,e,fA,C,D,E,F我已通读文档pandas.read_csv,但没有看到有关如何获得所需结果的指示。ETA:我试图让 Pandas(或 Jupyter Noteooks)从数据框中排除列,而不仅仅是列包含的值。
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我用您给我的示例进行了尝试,并注意到您要读取的列数是6,即1, 2, 3, 4, 5 and 6,而usecols您输入的也使用6条目,即索引0, 2, 3, 4, 5 and 6。换句话说,您正在使用不存在的列,这就是它转向NaN.


内容test.csv为:


1-5: *skip*

6:  1,  2,  3,  4,  5,  6

7:  a,  b,  c,  d,  e,  f

8:  A,  B,  C,  D,  E,  F

我用您给定的数据进行了尝试,结果如下:


df = pandas.read_csv('test.csv', usecols = [0, 2:6], skiprows=5)

print(df)

产生:


   1  3  4  5  6

0  a  c  d  e  f

1  A  C  D  E  F

另一方面,您的原始代码:


df = pandas.read_csv('test.csv', usecols = [0, 2:7], skiprows=5)

print(df)

产量:


   1  2  3  4  5    6

0  a  c  d  e  f  NaN

1  A  C  D  E  F  NaN

为此,您也可以删除该列:


df.drop(['6'], axis=1, inplace=True)

df.columns = ['1', '3', '4', '5', '6']


查看完整回答
反对 回复 2022-07-12
?
撒科打诨

TA贡献1934条经验 获得超2个赞

您可以尝试类似下面的方法,在其中指定要保留的所有列。

df.loc[:, ["1", "3", "4", "5", "6"]]

或者您可以低于此将仅删除指定的列。

df.drop(["2"], axis=1)


查看完整回答
反对 回复 2022-07-12
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号