pandas df['A'] = df['A'] + df['B']是否仍然是合并两列文本的有效方法:设置复制警告

hgc7kmma  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(236)

我已经将一些列从现有 Dataframe 复制到新 Dataframe 中,如下所示:

df_1 = pandas.DataFrame({'A': ['a','','c',''], 'B': ['','b','','d'], 'C': [1,2,3,4], 'D': [4,5,6,7]})

df_2 = df_1[['A', 'B']]

我正在组合两列文本列A和列B,我得到SettingWithCopyWarning错误通过执行这些操作:

df_2['A'] = df_2['A'] + df_2['B']

df_2['A'] = df_2['B'] + df_2['C']

无论是否覆盖列,我都会遇到此错误。我查看了SettingWithCopyWarning,似乎只有在存在双索引(如df['A']['B'] = value)时才会出现此问题。我希望再次检查并确保此类操作仍然可以执行。我创建了df_2作为df_1的简化版本,并且只打算继续使用df_2。我想保留df_1而不改变它。

df_1 = pandas.DataFrame({'A': ['a','','c',''], 'B': ['','b','','d'], 'C': [1,2,3,4], 'D': [4,5,6,7]})

df_2 = df_1[['A', 'B']]

df_2['A'] = df_2['A'] + df_2['B']

df_2

我期望df ['A ']应该是['a','b ','c','d '],而df ['B']仍然是['','b ','','d']

t9eec4r0

t9eec4r01#

您必须使用.loc[]copy()来避免此警告,以创建“副本”而不是视图:

df_1 = pandas.DataFrame({'A': ['a', '', 'c', ''], 'B': ['', 'b', '', 'd'],
                         'C': [1, 2, 3, 4], 'D': [4, 5, 6, 7]})

df_2 = df_1.loc[:, ['A', 'B']]  # <- HERE, or df_1['A', 'B'].copy()

df_2['A'] = df_2['A'] + df_2['B']

输出:

>>> df_2
   A  B
0  a   
1  b  b
2  c   
3  d  d

更多信息

# with df_2 = df_1[['A', 'B']]
>>> df_2._is_copy
<weakref at 0x7fd6cd9c94f0; to 'DataFrame' at 0x7fd7150c61c0>

>>> hex(id(df_1))
0x7fd7150c61c0

# with df_2 = df_1.loc[:, ['A', 'B']]
>>> None

相关问题