【发布时间】:2018-02-26 04:54:10
【问题描述】:
我正在尝试使用来自另一个 df (send_df) 的一些列在一个 df (receiver_df) 中设置一些值。
使用:
receiver_df.loc[send_df.index, stat_clmns_lst] = send_df.iloc[0][stat_col_lst]
代码静默失败。 send_df.index 似乎是问题所在。
此过程是循环的一部分。所以.join 不起作用。在第一次通过时,我不知道send_df 将通过的所有列。这是数据在第一次传递时的样子。
设置数据
import numpy as np
import pandas as pd
import string
from IPython.display import display
# Parameters
send_df_index = 2 # Tells send_df where to send data in receiver df
num_rows = 5
# Columns to get from send_df
send_col_lst = ['Some_Index', 'Another_Index']
# Datarame receiving data
receiver_df = pd.DataFrame({'Attempted':[False for x in range(num_rows)],
'StringX':[pd.util.testing.rands(3) for x in range(num_rows)],
'StringY':[pd.util.testing.rands(3) for x in range(num_rows)]
})
# Dataframe sending data
send_values = random.choices(string.ascii_uppercase, k=1)
send_values.extend(np.random.uniform(low=2, high=100, size=(1,2)).tolist()[0])
send_df = pd.DataFrame([send_values],
columns=['String', 'Some_Index', 'Another_Index'],
index=[stats_df_index])
脚本
# Reindex - We dont know the stat columns ahead of time
new_col_lst = receiver_df.columns.values.tolist()
new_col_lst.extend(send_col_lst)
receiver_df = receiver_df.reindex(columns=new_col_lst)
# Set values to receiving df send_df[stat_col_lst]
receiver_df.loc[send_df.index, send_col_lst] = send_df.iloc[0][send_col_lst]
display(receiver_df)
不想要的结果:
期望的结果:
【问题讨论】:
-
@Zero 因为 send_df 中有一些列与 receiver_df 重叠,但我不想使用它们或合并它们。
-
@ 至于你的第二个解决方案,我试过了,但 .loc 想要一个系列
-
@ Zero 我都试过了。两种解决方案都不起作用。在第二个循环中,
join再次添加了send_df列。第二种解决方案的错误是ValueError:: Incompatible indexer with Series
标签: python-3.x pandas