Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在dataframe中使用字符串作为列名_Python_Pandas - Fatal编程技术网

Python 如何在dataframe中使用字符串作为列名

Python 如何在dataframe中使用字符串作为列名,python,pandas,Python,Pandas,我有一个excel工作簿,我正在从中读取数据并使用它做事情。在excel工作簿中,有些列标题是数字,我不知道如何使用它们。我也不允许更改excel中的列标题(出于本项目的目的) 在本例中,列标题都是相同的(例如:2008、2008和2008),并且都是数字。这在我的项目背景下是有意义的,但对熊猫和我来说都很困惑。之所以区分它们,是因为excel工作簿中它们上方的行包含更多信息 filename = 'myfile.xlsx' data = pd.read_excel(myfile, skipro

我有一个excel工作簿,我正在从中读取数据并使用它做事情。在excel工作簿中,有些列标题是数字,我不知道如何使用它们。我也不允许更改excel中的列标题(出于本项目的目的)

在本例中,列标题都是相同的(例如:2008、2008和2008),并且都是数字。这在我的项目背景下是有意义的,但对熊猫和我来说都很困惑。之所以区分它们,是因为excel工作簿中它们上方的行包含更多信息

filename = 'myfile.xlsx'
data = pd.read_excel(myfile, skiprows=8)

print("Column Headings")
print(data.columns)
打印列标题的结果(缩短列表):

现在我需要使用这些列名来获取这些列中的数据

provider_name = 'example_name'
subset_by_provider = data.loc[data['Provider'] == provider_name]

#the error is here. 2008 is the column name
data_2008 = subset_by_provider.2008.tolist() 
如上所述,错误在代码的最后一行。我正在把数据读入一个列表。2008(作为一个整数)和“2008.1”是我的excel工作表中列的名称。但是我有一个语法错误

#Doesn't work
data_2008 = subset_by_provider.2008.tolist()

#Doesn't work
data_2008 = subset_by_provider.'2008.1'.tolist()

#Does work
data_2008 = subset_by_provider.i2008.tolist()
在第二行,我将excel工作表中的列名从2008改为i2008,只是为了证明一点。然而,在实践中,我是不允许这样做的


如何阅读列名称2008或“2008.1”?

如上面评论中所述。解决方案:

data_2008 = subset_by_provider[2008].tolist()

or

data_2008 = subset_by_provider['2008.1'].tolist()

subset\u by\u provider['2008']
?如果
'provider'
不在您的列中,它如何在
subset\u by\u provider=data.loc[data['provider']==provider\u name]
上不失败。您可能需要考虑使用更好的列名。或者至少将
2008
转换为一个字符串。除非列名非常简单,否则不要使用点表示法访问列。我总是练习用括号表示法<代码>提供者提供的子集['2008.1']@Scott。。。即使你碰巧有“简单”的名字,如果它们是
size
index
id
count
。。。等等稍后你会看到一些奇怪的事情发生。。。(充其量它会破裂,最坏的情况下,只是混乱:p)
data_2008 = subset_by_provider[2008].tolist()

or

data_2008 = subset_by_provider['2008.1'].tolist()