[英]How do I replace a slice of a dataframe column with values from another dataframe column slice?
我有兩個數據框,其中包含多個列,包括時間戳列。 我想將前 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']
我認為您的解決方案失敗了,因為 DataFrames 的長度不同。
樣品:
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
給定 df1,df2:
df1 = pd.DataFrame({'timestamp': range(0,2000)})
df2 = -df1
使用 .loc:
df1.loc[:999,'timestamp'] = df2.loc[:999,'timestamp']
df1.loc[997:1002,'timestamp']
997 -997
998 -998
999 -999
1000 1000
1001 1001
1002 1002
Name: timestamp, dtype: int64
或使用 iloc (可選地使用 get_loc 轉換 loc -> get_loc
)
df1.iloc[:1000,0] = df2.iloc[:1000,0]
df1.loc[997:1002,'timestamp']
997 -997
998 -998
999 -999
1000 1000
1001 1001
1002 1002
Name: timestamp, dtype: int64
請注意, iloc 和 loc 上的切片行為是不同的。
.loc
包含正確的值, .iloc
不包含它(例如在范圍內)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.