我读了一个csv文件,如下所示:
import pandas as pd
out = "M:/transitions.csv"
transitions = pd.read_csv(out)
transitions = transitions.groupby('unique_pid')
这是我的数据框的样子:
In [11]: transitions.head()
Out[11]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5 entries, 0 to 4
Data columns (total 24 columns):
Unnamed: 0 5 non-null values
Unnamed: 0.1 5 non-null values
Unnamed: 0.1 5 non-null values
unique_pid 5 non-null values
Unnamed: 1 5 non-null values
unique_pid.1 5 non-null values
age 5 non-null values
age2 5 non-null values
year 5 non-null values
Single-family house 5 non-null values
Duplex/ 2-family house 5 non-null values
Multifamily 5 non-null values
Mobile Home/ trailer 5 non-null values
Condo 5 non-null values
Townhouse 5 non-null values
Other 5 non-null values
Don't know 5 non-null values
Refused 5 non-null values
numrooms 5 non-null values
famsize 5 non-null values
moved 5 non-null values
whymoved 5 non-null values
seniorh 5 non-null values
inst 5 non-null values
dtypes: float64(10), int64(14)
我得到以下错误:
TypeError: 'DataFrame' object is not callable
我使用以下代码检查了键“ unique_pid”是否在我的数据框中:
In [8]: print 'unique_pid' in transitions
True
因此,它显然是有效的密钥。我以前以这种方式多次使用groupby都没有问题,所以我不确定出什么问题。
最佳答案
这似乎是此SO question中问题的更细微版本。
本质上,尽管DF将愉快地导入具有多个相同名称的列的数据,但groupby函数似乎在这种数据帧上窒息而死。重命名重复的列名通常可以解决问题。关于您的问题的奇怪之处在于,这些列并不完全相同,而只是非常接近。不知道为什么那会是一个问题。但是,我看到Unnamed:0.1出现了两次,这可能也弄糟了。当不得不处理遭受此重复的数据时,我建议执行第一步,以合理且唯一的名称列表重命名所有列标题。您可以通过将新列标题字符串的列表分配给transitions.columns la来实现:
transitions.columns = ['Unnamed_A', 'Unnamed_B', 'Unnamed_C', 'unique_pid_A', 'Unnamed_D', 'unique_pid_B', 'age', 'age2', 'year', 'Single-family house', 'Duplex_2_family hou', 'Multifamily', 'Mobile Home/ trailer', 'Condo', 'Townhouse', 'Other', 'Don't know', 'Refused', 'numrooms', 'famsize', 'moved', 'whymoved', 'seniorh', 'inst']