Trying to create a new column delivers A value is trying to be set on a copy of a slice from a DataFrame 试图创建一个新列传递一个值试图在 DataFrame 的切片副本上设置
Trying to create a new column delivers A value is trying to be set on a copy of a slice from a DataFrame
我有问题。我想创建一个新列 adress
。在此之前,我只想获取 namecode
=== code
的所有列,但不幸的是我遇到了错误 A value is trying to be set on a copy ...
。我查看了(见下文)但对我没有任何帮助。
- How to deal with SettingWithCopyWarning in Pandas
- SettingWithCopyWarning even when using .loc[row_indexer,col_indexer] = value
- Python Pandas Warning: A value is trying to be set on a copy of a slice from a DataFrame
customerId code namecode name street adresscode
0 1 1 1 Mike Long Street 458
1 2 1 1 Jucie Short Street 856
2 3 9999 48 Max Average Street 874
import pandas as pd
import pandas as pd
d = {'customerId': [1, 2, 3],
'code': [1, 1, 9999],
'name_code': [1, 1, 48],
'name': ['Mike', 'Jucie', 'Max'],
'street': ['Long Street', 'Short Street', 'Average Street'],
'adresscode': ['458', '856', '874']
}
df_old = pd.DataFrame(data=d)
display(df_old)
df_new = df_old.loc[df_old['code'] == df_old['name_code']]
>>> df_new['adress'] = df_new ['name'].copy() + df_new ['street'].copy() + df_new ['adresscode'].copy()
[OUT]
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
>>> df_new['adress'] = df_new .loc['name','street','adresscode']
[OUT]
IndexingError: Too many indexers
我想要的
customerId code namecode name street adresscode adress
0 1 1 1 Mike Long Street 458 Mike Long Street 458
1 2 1 1 Jucie Short Street 856 Jucie Short Street 856
切片时需要复制,赋值时不需要:
df_new = df_old.loc[df_old['code'] == df_old['name_code']].copy()
df_new['adress'] = df_new['name'] + df_new['street'] + df_new['adresscode']
输出(没有SettingWithCopyWarning
):
customerId code name_code name street adresscode \
0 1 1 1 Mike Long Street 458
1 2 1 1 Jucie Short Street 856
adress
0 MikeLong Street458
1 JucieShort Street856
对于其他切片,您需要使用列列表:
df_new = df_old[['name','street','adresscode']].copy()
# OR
df_new = df_old.loc[:, ['name','street','adresscode']].copy()
我有问题。我想创建一个新列 adress
。在此之前,我只想获取 namecode
=== code
的所有列,但不幸的是我遇到了错误 A value is trying to be set on a copy ...
。我查看了(见下文)但对我没有任何帮助。
- How to deal with SettingWithCopyWarning in Pandas
- SettingWithCopyWarning even when using .loc[row_indexer,col_indexer] = value
- Python Pandas Warning: A value is trying to be set on a copy of a slice from a DataFrame
customerId code namecode name street adresscode
0 1 1 1 Mike Long Street 458
1 2 1 1 Jucie Short Street 856
2 3 9999 48 Max Average Street 874
import pandas as pd
import pandas as pd
d = {'customerId': [1, 2, 3],
'code': [1, 1, 9999],
'name_code': [1, 1, 48],
'name': ['Mike', 'Jucie', 'Max'],
'street': ['Long Street', 'Short Street', 'Average Street'],
'adresscode': ['458', '856', '874']
}
df_old = pd.DataFrame(data=d)
display(df_old)
df_new = df_old.loc[df_old['code'] == df_old['name_code']]
>>> df_new['adress'] = df_new ['name'].copy() + df_new ['street'].copy() + df_new ['adresscode'].copy()
[OUT]
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
>>> df_new['adress'] = df_new .loc['name','street','adresscode']
[OUT]
IndexingError: Too many indexers
我想要的
customerId code namecode name street adresscode adress
0 1 1 1 Mike Long Street 458 Mike Long Street 458
1 2 1 1 Jucie Short Street 856 Jucie Short Street 856
切片时需要复制,赋值时不需要:
df_new = df_old.loc[df_old['code'] == df_old['name_code']].copy()
df_new['adress'] = df_new['name'] + df_new['street'] + df_new['adresscode']
输出(没有SettingWithCopyWarning
):
customerId code name_code name street adresscode \
0 1 1 1 Mike Long Street 458
1 2 1 1 Jucie Short Street 856
adress
0 MikeLong Street458
1 JucieShort Street856
对于其他切片,您需要使用列列表:
df_new = df_old[['name','street','adresscode']].copy()
# OR
df_new = df_old.loc[:, ['name','street','adresscode']].copy()