Python 修正了追加数据帧时的索引问题
我附加了三个CSV:Python 修正了追加数据帧时的索引问题,python,python-3.x,pandas,dataframe,indexing,Python,Python 3.x,Pandas,Dataframe,Indexing,我附加了三个CSV: df = pd.read_csv("places_1.csv") temp = pd.read_csv("places_2.csv") df = df.append(temp) temp = pd.read_csv("places_3.csv") df = df.append(temp) print(df.head(20)) 联接的表如下所示: location device_count population 0 A 11
df = pd.read_csv("places_1.csv")
temp = pd.read_csv("places_2.csv")
df = df.append(temp)
temp = pd.read_csv("places_3.csv")
df = df.append(temp)
print(df.head(20))
联接的表如下所示:
location device_count population
0 A 11 NaN
1 B 12 NaN
2 C 13 NaN
3 D 14 NaN
4 E 15 NaN
0 F 21 NaN
1 G 22 NaN
2 H 23 NaN
3 I 24 NaN
4 J 25 NaN
0 K 31 NaN
1 L 32 NaN
2 M 33 NaN
3 N 34 NaN
4 O 35 NaN
正如您所看到的,索引不是唯一的
当我调用此iloc函数将人口列乘以2时:
df2 = df.copy
for index, row in df.iterrows():
df.iloc[index, df.columns.get_loc('population')] = row['device_count'] * 2
我得到了以下错误的结果:
location device_count population
0 A 11 62.0
1 B 12 64.0
2 C 13 66.0
3 D 14 68.0
4 E 15 70.0
0 F 21 NaN
1 G 22 NaN
2 H 23 NaN
3 I 24 NaN
4 J 25 NaN
0 K 31 NaN
1 L 32 NaN
2 M 33 NaN
3 N 34 NaN
4 O 35 NaN
对于每个CSV,它将覆盖第一个CSV的索引
我还尝试创建一个新的整数列并调用df.set_index。那是行不通的
任何提示?首先,使用忽略索引,其次,不要使用附加,使用pd.concat[temp1,temp2,temp3],忽略索引=真。首先,使用忽略索引,其次,不要使用附加,使用pd.concat[temp1,temp2,temp3],忽略索引=真。如其他人所述,您可以使用忽略索引,您可能应该在这里使用pd.concat。或者,对于不组合数据帧的其他情况,也可以使用df=df.reset\u indexdrop=True在事件发生后更改索引 此外,由于文档中列出的原因,您应该避免使用iterrows。使用以下方法更有效:
df.loc[:, 'population'] = df.loc[:, 'device_count'].astype('int') * 2
正如其他人所说,您可以使用ignore_索引,并且您可能应该在这里使用pd.concat。或者,对于不组合数据帧的其他情况,也可以使用df=df.reset\u indexdrop=True在事件发生后更改索引 此外,由于文档中列出的原因,您应该避免使用iterrows。使用以下方法更有效:
df.loc[:, 'population'] = df.loc[:, 'device_count'].astype('int') * 2
add ignore_index,df.appendtemp,ignore_index=Trueadd ignore_index,df.appendtemp,ignore_index=Truethe*2只是我正在运行的一个更复杂的函数的代理,它涉及行中的多个列。为什么使用concat而不是append?@SteveScott它更灵活,使用范围更广,因此可能更高效。奇怪的df=df.reset\u indexdrop=True或df.reset\u indexdrop=True,inplace=True应该可以工作……如果向量化不是函数的选项,我建议您参考cs95对此的回答,以了解使用函数修改数据帧的性能分析。你会注意到iterrows是你应该使用的最后一个工具,*2只是我正在运行的一个更复杂函数的代理,它涉及行中的多个列。为什么要使用concat而不是append?@SteveScott它更灵活,使用范围更广,因此可能更高效。奇怪的df=df.reset\u indexdrop=True或df.reset\u indexdrop=True,inplace=True应该可以工作……如果向量化不是函数的选项,我建议您参考cs95对此的回答,以了解使用函数修改数据帧的性能分析。您会注意到ItErrors是您应该使用的最后一个工具,为什么要使用concat而不是append@Igor Riven为什么使用concat而不是append@伊戈尔河