如何在python中的csv文件中指定没有列名的列

时间:2017-09-06 09:53:36

标签: python pandas csv dataframe

我有一个如下列表,我在csv文件中搜索它以获得与之关联的项目代码。例如,对于0 - >商品代码是11nm

L = [0, 2]

CSV file:
0, 11nm
1, 22nm
2, 33nm
3, 44nm

我目前正在执行以下操作。

df = pd.read_csv('item_code.csv', sep = ',')
item_codes= df[df["No"].isin(L)]["item_code"].tolist()

但是,现在我想知道当文件标题(No,item_code)不可用时如何为csv文件做同样的事情。

请帮帮我。

3 个答案:

答案 0 :(得分:2)

您可以使用参数names来指定列名称,以便选择列使用loc

df = pd.read_csv('item_code.csv', names=['No','item_code'])
print (df)
   No item_code
0   0      11nm
1   1      22nm
2   2      33nm
3   3      44nm


item_codes= df.loc[df["No"].isin(L), "item_code"].tolist()
print (item_codes)
['11nm', '33nm']

或者使用参数header=None作为默认列名称0,1...

df = pd.read_csv('item_code.csv', header=None)

print (df)
   0     1
0  0  11nm
1  1  22nm
2  2  33nm
3  3  44nm

#first column selected by position with iloc
item_codes= df.loc[df.iloc[:,0].isin(L), 1].tolist()
print (item_codes)
['11nm', '33nm']
#first column selected by column name
item_codes= df.loc[df[0].isin(L), 1].tolist()
print (item_codes)
['11nm', '33nm']

答案 1 :(得分:2)

当列名不可用时,您可以使用item_codes = df[df.iloc[:, 0].isin(L)].iloc[:, 1].tolist()

通过索引引用它们
import pandas as pd
import numpy as np
import io

text = \
'''0, 11nm
1, 22nm
2, 33nm
3, 44nm'''

buf = io.StringIO(text)    
df = pd.read_csv(buf, sep=',\s*', header=None, engine='python') # no column names
print(df) 

   0     1
0  0  11nm
1  1  22nm
2  2  33nm
3  3  44nm

L = [0, 2]
item_codes = df[df.iloc[:, 0].isin(L)].iloc[:, 1]
print(item_codes)

0    11nm
2    33nm
Name: 1, dtype: object

print(item_codes.tolist())
['11nm', '33nm']

MCVE:

sep=',\s*'

注意:

  • header=None是一个正则表达式模式(用于指定列分隔符)
  • engine='python'将阻止分配任何行
  • <ion-infinite-scroll (ionInfinite)="fetchMore($event)"> <ion-infinite-scroll-content></ion-infinite-scroll-content> </ion-infinite-scroll> 选择正则表达式引擎

答案 2 :(得分:0)

使用header=None阅读csv文件后,让pandas知道您的文件中没有标题:

df = pd.read_csv('item_code.csv', sep = ',', header=None)

您可以使用列索引而不是列名。

像这样:

df[df[0].isin(L)][1].tolist()

或者这个:

df[df.iloc[:,0].isin(L)][1].tolist()

说明:

如果您在阅读后打印数据框而没有包含print(df)

标题的数据框
   0     1
0  0  11nm
1  1  22nm
2  2  33nm
3  3  44nm

您会注意到,pandas会将数字[0,1]分配给列名而不是["No", "item_code"],而不是作为标题出现的df[0]。因此,您可以使用其索引(如df.iloc[:, 0]df.iloc[:, 0])引用每个列。

后者0告诉pandas占用所有行,只列df.iloc列。