这是一个非常基本的问题,我似乎无法找到答案.
我有一个这样的数据帧,称为df:
A B C
a.1 b.1 c.1
a.2 b.2 c.2
a.3 b.3 c.3
Run Code Online (Sandbox Code Playgroud)
然后我从df中提取所有行,其中列'B'的值为'b.2'.我将这些结果分配给df_2.
df_2 = df[df['B'] == 'b.2']
Run Code Online (Sandbox Code Playgroud)
df_2成为:
A B C
a.2 b.2 c.2
Run Code Online (Sandbox Code Playgroud)
然后,我将列'B'中的所有值复制到名为'D'的新列中.导致df_2成为:
A B C D
a.2 b.2 c.2 b.2
Run Code Online (Sandbox Code Playgroud)
当我执行这样的任务时:
df_2['D'] = df_2['B']
Run Code Online (Sandbox Code Playgroud)
我收到以下警告:
尝试在DataFrame的切片副本上设置值.尝试使用.loc [row_indexer,col_indexer] = value
请参阅文档中的警告:http: //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
在创建像这样的df_2时我也尝试过使用.loc:
df_2 = df.loc[df['B'] == 'b.2']
Run Code Online (Sandbox Code Playgroud)
但是,我仍然收到警告.
任何帮助是极大的赞赏.
Ana*_*mar 58
您可以简单地将其分配B给新列,如 -
df['D'] = df['B']
Run Code Online (Sandbox Code Playgroud)
示例/演示 -
In [1]: import pandas as pd
In [2]: df = pd.DataFrame([['a.1','b.1','c.1'],['a.2','b.2','c.2'],['a.3','b.3','c.3']],columns=['A','B','C'])
In [3]: df
Out[3]:
A B C
0 a.1 b.1 c.1
1 a.2 b.2 c.2
2 a.3 b.3 c.3
In [4]: df['D'] = df['B'] #<---What you want.
In [5]: df
Out[5]:
A B C D
0 a.1 b.1 c.1 b.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
In [6]: df.loc[0,'D'] = 'd.1'
In [7]: df
Out[7]:
A B C D
0 a.1 b.1 c.1 d.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 17
问题出现在抛出警告的那一行之前.当您创建df_2时,您正在创建数据帧切片的副本.相反,当您创建df_2时,请使用.copy(),稍后您将不会收到该警告.
df_2 = df[df['B'] == 'b.2'].copy()
Run Code Online (Sandbox Code Playgroud)
您可以使用该方法assign。它返回一个新的 DataFrame,以便您可以将其与其他方法一起使用在链中。
df.assign(D=df.B)
Run Code Online (Sandbox Code Playgroud)
输出:
A B C D
0 a.1 b.1 c.1 b.1
1 a.2 b.2 c.2 b.2
2 a.3 b.3 c.3 b.3
Run Code Online (Sandbox Code Playgroud)
小智 5
我认为正确的访问方法是使用索引:
df_2.loc[:,'D'] = df_2['B']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85939 次 |
| 最近记录: |