【问题标题】:Python Pandas DataFrame column calls by column index but not name?Python Pandas DataFrame 列按列索引而不是名称调用?
【发布时间】:2017-08-05 07:41:31
【问题描述】:

所以在这里我将一个csv文件导入python,然后尝试对第一列做一些事情:'Type',但我不断收到消息:

“AttributeError:‘DataFrame’对象没有属性‘Type’”。

按名称打印列不起作用,但按位置打印它。为什么按名称引用它不起作用?它适用于所有其他列。

import pandas as pd
data = pd.read_csv('ResturantData.csv', sep=',', index_col=False) 
df = pd.DataFrame(data=data)

print(df.head())
print(df.columns)

print(df.iloc[:, 0])    #Works! 
print(df.Type)          #Doesn't work :/
print(df['Type'])       #Doesn't work :/

这是 DataFrame 的样子;

     Type  Size  Bill  Tip
0  Dinner     5   126   12
1  Dinner     4   103   12
2  Dinner     4    94   11
3  Breakfast  4    87   10
4  Dinner     4    76    7

谢谢!

【问题讨论】:

  • 您可能有多余的空格。 df.columns.tolist()的输出是什么
  • 正如@ayhan 指出的,也许可以试试df[' Type']
  • @Wen 是的,也可以将skipinitialspace=True 传递给 read_csv。

标签: python python-3.x pandas


【解决方案1】:

Type 列的第一个字符不是 ascii。我是'\ufeff'

这是一种从列名中去除非 ascii 的方法。

df.rename(columns=lambda x: ''.join([y for y in x if ord(y) < 128]), inplace=True)

df.Type

0       Dinner
1       Dinner
2       Dinner
3    Breakfast
4       Dinner
Name: Type, dtype: object

【讨论】:

  • 就是这样,谢谢!!如何在原始 csv 中将其设为 ascii?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 2013-02-21
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多