我正在读取没有标题的熊猫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,印度, A-X-o,11.43,中国, D-F-L,6.09,肯尼亚
现在运行此代码
cols = [2,3,1] 名称= ['价格','国家','代码']
temp = pd.read_csv('test.csv',header = None,skiprows = [0],engine ='python',sep ='|,',usecols = cols,names = names)
产生...
价格国家代码 0 A-X-o 11.43中国 1 D-F-L 6.09肯尼亚
这是错误的,因为国家/地区不是小数位
答案 0 :(得分:1)
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)
编辑:
您用错误的方式使用了usecols,因为[2,3,1]
和[1,2,3]
都是一样的,所以不会更改顺序,重要的是如何指定names
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
让cols更改为[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
因此,基本上只是将cols切换为[2,3,1]并相应地将其名称指定为['price','country','code']不会给您带来不同的结果,因为usecols[2,3,1]
= = usecols[1,2,3]
答案 1 :(得分:0)
仅使用文件名及其有效位置docs
temp = pd.read_csv(file_name,usecols= ['a', 'b', 'c'])
在另一方面,您可以拉出所有列的csv文件,并删除未使用的列,如下所示
temp=pd.read_csv(file_name)
temp.drop(['col1','col2'...'coln'], axis=1, inplace=True)