gpt4 book ai didi

python - Pandas read_csv usecols 和名称无法正常工作

转载 作者:行者123 更新时间:2023-12-02 03:11:56 30 4
gpt4 key购买 nike

我正在 pandas 中读取一个没有标题的 csv 文件。我的问题是,当我在 usecols 中硬编码值并命名时,它工作正常。但是,当我从 cols 和名称列表获取输入(这些列表从 json 文件作为输入)时,列名称和行不匹配。很长一段时间以来,我一直对这个问题感到震惊。

//这不起作用。

temp = pd.read_csv(file_name, header=None ,
skiprows=[0], engine='python',
sep=' |,',
usecols=cols,
names=names)

//但这是可行的

temp = pd.read_csv(file_name, header=None ,
skiprows=[0], engine='python',
sep=' |,',
usecols=[10,12,14],
names=['a', 'b', 'c'])

考虑这个 csv:

X-Y-Z,12.67,India,
A-X-o,11.43,China,
D-F-L,6.09,Kenya.

现在运行此代码

cols = [2,3,1]
names = ['price','country','code']

temp = pd.read_csv('test.csv', header=None ,
skiprows=[0], engine='python',
sep=' |,',
usecols = cols,
names= names)

产生...

   price  country   code
0 A-X-o 11.43 China
1 D-F-L 6.09 Kenya

这是错误的,因为国家/地区不是小数

最佳答案

import pandas as pd
fields = ['a', 'b','c']
#always use `skipinitialspace` which remove the spaces in the header for reading specific columns
df = pd.read_csv('data.csv', skipinitialspace=True, usecols=fields)

编辑:

你使用cols的方式是错误的,因为[2,3,1][1,2,3]都是相同的,它不会改变顺序,重要的是你如何指定名称

import pandas as pd   

df = {'letters': ['X-Y-Z','A-X-o','D-F-L'],
'num': [12.67,11.43,6.09],
'Country':['India','China','Kenya']}

df = pd.DataFrame(df)
df.to_csv('df.csv', header=False)

让我们考虑一些场景

#this is what you have done
cols = [2,3,1]
names = ['price','country','code']
temp = pd.read_csv('df.csv', header=None ,skiprows=[0], engine='python', sep=',',usecols = cols, names= names)

输出

        price   country code
1 A-X-o 11.43 China
2 D-F-L 6.09 Kenya

让我们将列更改为[1,2,3],输出不会发生变化

cols = [1,2,3]
names = ['price','country','code']
temp = pd.read_csv('df.csv', header=None ,skiprows=[0], engine='python', sep=',',usecols = cols, names= names)

输出

        price   country code
1 A-X-o 11.43 China
2 D-F-L 6.09 Kenya

现在让我们将 cols 更改为 [2,3,1][1,2,3]names ['code','price','country']

cols = [2,3,1]
names = ['code','price','country']
temp = pd.read_csv('df.csv', header=None ,skiprows=[0], engine='python', sep=',', usecols = cols, names= names)

输出

    code    price   country
0 A-X-o 11.43 China
1 D-F-L 6.09 Kenya

所以基本上只需将列切换为 [2,3,1] 并相应地分配其名称为 ['price','country','code'] 不会给你不同的结果,因为 usecols[2 ,3,1] == usecols[1,2,3]

关于python - Pandas read_csv usecols 和名称无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57306049/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com