我有两个包含几列的数据框,其中包括时间戳列。我想将前1000个时间戳从第二个数据帧复制到第一个数据帧。
df1 = pd.read_csv(file1.csv)
df2 = pd.read_csv(file2.csv)
df1.timestamp.iloc[:1000] = df2.timestamp.iloc[:1000]
我尝试了各种操作,例如添加.copy()
到右侧,使用.loc[:1000, 'timestamp']
而不是columnname.iloc语法,首先将列系列转换为numpy数组,但是我不断遇到错误,范围从“索引过多”到要使用的指令。 loc [rowindexing,columnindexing](无法解决问题)和其他错误消息。
使用Index.get_loc
通过名称的列的位置,所以可以传球给DataFrame.iloc
:
s = df2.iloc[:1000, df2.columns.get_loc('timestamp')]
df1.iloc[:1000, df1.columns.get_loc('timestamp')] = s
或者,如果DataFrame.loc
与切片索引一起使用,但仅在两个DataFrame的长度都较大时才起作用,例如1000
:
df1.loc[:df1.index[1000], 'timestamp'] = df2.loc[:df2.index[1000], 'timestamp']
我认为您的解决方案失败了,因为数据帧的长度不同。
样品:
df1 = pd.DataFrame({ "timestamp" : [2000, 2001, 2002, 2003, 1990, 1991,
1992, 1993, 1994, 2010, 2011, 2012]})
df2 = pd.DataFrame({
'A':list('abcdef'),
'timestamp':[4,5,4,5,5,4],
})
s = df2.iloc[:1000, df2.columns.get_loc('timestamp')]
df1.iloc[:1000, df1.columns.get_loc('timestamp')] = s
print (df1)
timestamp
0 4.0
1 5.0
2 4.0
3 5.0
4 5.0
5 4.0
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
df1 = pd.DataFrame({ "timestamp" : [2000, 2001, 2002, 2003, 1990, 1991,
1992, 1993, 1994, 2010, 2011, 2012]})
df2 = pd.DataFrame({
'A':list('abcdef'),
'timestamp':[4,5,4,5,5,4],
})
s = df1.iloc[:1000, df1.columns.get_loc('timestamp')]
df2.iloc[:1000, df2.columns.get_loc('timestamp')] = s
print (df2)
A timestamp
0 a 2000
1 b 2001
2 c 2002
3 d 2003
4 e 1990
5 f 1991
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句