无法使用 pandas 提取数据框列
Unable to extract dataframe column using pandas
我是 pandas 的新手,正在努力重命名列然后提取它。
我已将 xls 文件读入 pandas 数据框对象。
df = pd.read_excel("something.xls")
bank_statement.columns.values[0] = 'Din'
bank_statement.columns
这显示了列
Index([u'Din', u'Unnamed: 1', u'Unnamed: 2', u'Unnamed: 3', u'Unnamed: 4',
u'Unnamed: 5', u'Unnamed: 6'],
dtype='object')
但这会导致错误。
bank_statement.Din
错误是:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-11-6ce73c262cd1> in <module>()
----> 1 bank_statement.Din
/Users/monideepde/anaconda2/lib/python2.7/site-packages/pandas/core/generic.pyc in __getattr__(self, name)
3612 if name in self._info_axis:
3613 return self[name]
-> 3614 return object.__getattribute__(self, name)
3615
3616 def __setattr__(self, name, value):
AttributeError: 'DataFrame' object has no attribute 'Din'
与此相反,当我尝试对导入时命名的列执行相同操作时,我没有遇到任何问题。
data = pd.read_csv("/somepath/TestFrame.csv")
data
我可以访问这些列
谁能指出我哪里错了?
谢谢
不要使用 .values
:
更新内部 Pandas 结构
bank_statement.columns.values[0] = 'Din'
使用相应的 API function/method 代替:
bank_statement = bank_statement.rename(columns={'Unnamed: 0':'Din'})
演示:
In [216]: df = pd.DataFrame(np.random.randn(3, 3), columns=list('abc'))
In [217]: df
Out[217]:
a b c
0 -0.972161 -0.484091 -0.289475
1 1.081694 1.215217 0.241532
2 -0.581193 0.691856 0.194182
In [218]: df.columns
Out[218]: Index(['a', 'b', 'c'], dtype='object')
让我们破解它:
In [219]: df.columns.values[0] = 'Din'
它似乎有效:
In [220]: df.columns
Out[220]: Index(['Din', 'b', 'c'], dtype='object')
但是:
In [221]: df['Din']
...
skipped
...
KeyError: 'Din'
惊喜! Pandas 仍然认为它有一个 a
列:
In [222]: df['a']
Out[222]:
0 -0.972161
1 1.081694
2 -0.581193
Name: Din, dtype: float64
解决方法:
In [224]: df.columns = ['Din'] + df.columns.tolist()[1:]
In [225]: df.columns
Out[225]: Index(['Din', 'b', 'c'], dtype='object')
In [226]: df['Din']
Out[226]:
0 -0.972161
1 1.081694
2 -0.581193
Name: Din, dtype: float64
我是 pandas 的新手,正在努力重命名列然后提取它。
我已将 xls 文件读入 pandas 数据框对象。
df = pd.read_excel("something.xls")
bank_statement.columns.values[0] = 'Din'
bank_statement.columns
这显示了列
Index([u'Din', u'Unnamed: 1', u'Unnamed: 2', u'Unnamed: 3', u'Unnamed: 4',
u'Unnamed: 5', u'Unnamed: 6'],
dtype='object')
但这会导致错误。
bank_statement.Din
错误是:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-11-6ce73c262cd1> in <module>()
----> 1 bank_statement.Din
/Users/monideepde/anaconda2/lib/python2.7/site-packages/pandas/core/generic.pyc in __getattr__(self, name)
3612 if name in self._info_axis:
3613 return self[name]
-> 3614 return object.__getattribute__(self, name)
3615
3616 def __setattr__(self, name, value):
AttributeError: 'DataFrame' object has no attribute 'Din'
与此相反,当我尝试对导入时命名的列执行相同操作时,我没有遇到任何问题。
data = pd.read_csv("/somepath/TestFrame.csv")
data
我可以访问这些列
谁能指出我哪里错了?
谢谢
不要使用 .values
:
bank_statement.columns.values[0] = 'Din'
使用相应的 API function/method 代替:
bank_statement = bank_statement.rename(columns={'Unnamed: 0':'Din'})
演示:
In [216]: df = pd.DataFrame(np.random.randn(3, 3), columns=list('abc'))
In [217]: df
Out[217]:
a b c
0 -0.972161 -0.484091 -0.289475
1 1.081694 1.215217 0.241532
2 -0.581193 0.691856 0.194182
In [218]: df.columns
Out[218]: Index(['a', 'b', 'c'], dtype='object')
让我们破解它:
In [219]: df.columns.values[0] = 'Din'
它似乎有效:
In [220]: df.columns
Out[220]: Index(['Din', 'b', 'c'], dtype='object')
但是:
In [221]: df['Din']
...
skipped
...
KeyError: 'Din'
惊喜! Pandas 仍然认为它有一个 a
列:
In [222]: df['a']
Out[222]:
0 -0.972161
1 1.081694
2 -0.581193
Name: Din, dtype: float64
解决方法:
In [224]: df.columns = ['Din'] + df.columns.tolist()[1:]
In [225]: df.columns
Out[225]: Index(['Din', 'b', 'c'], dtype='object')
In [226]: df['Din']
Out[226]:
0 -0.972161
1 1.081694
2 -0.581193
Name: Din, dtype: float64