Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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 修正了追加数据帧时的索引问题_Python_Python 3.x_Pandas_Dataframe_Indexing - Fatal编程技术网

Python 修正了追加数据帧时的索引问题

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

我附加了三个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         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@伊戈尔河