簡體   English   中英

如何根據條件替換 Panda 數據框列中的單元格

[英]How do I replace cells in a Panda dataframe column based on a condition

這篇文章包含兩個問題,涉及我在嘗試根據給定條件替換 Panda 數據框中的元素時遇到的問題。 我是 Pandas 的新手,所以任何建議都將是最有幫助的。

1:修改一定長度的字符串

考慮 Panda 數據框對象 df 中的 A 列:

SSIC
103
1040
1054
1065
107

我想將整數 0 附加到長度小於 4 的每個單元格。 也就是說,我想獲得:

SSIC
0103
1040
1054
1065
0107

這些值屬於 float64 類型。

目前,我使用了這種方法:

SSIC1 = df['SSIC'].astype('int64').astype(str)

for i,n in enumerate(SSIC1):
    if len(SSIC1[i]) == 4:
       SSIC1[i] = '0' + SSIC1[i]

df['SSIC'] = SSIC1

它有效,但我想知道它是否相當冗長。 有沒有更直接的方法來解決這個問題?

2:使用 where 子句時設置復制警告

我在數據框中有以下兩列

A  B
2  1
3  4
4  6
5  4
5  2

我想用 B 中同一行上的值替換 A 列中值為 5 的單元格。

我使用了 where 條件:

df['A']=df['A'].where(df['A'] == 5, df['B'], inplace=True)

但它給了我以下錯誤:

SettingWithCopyWarning:試圖在 DataFrame 中切片的副本上設置值。 嘗試使用 .loc[row_indexer,col_indexer] = value 代替

請參閱文檔中的注意事項: http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy if name == ' main ':

我第一次運行它時沒有出現這個警告。 任何想法為什么它突然出現?

對於您的第一部分,請調用矢量化str.zfill

In [167]:
df['SSIC'].astype(str).str.zfill(4)

Out[167]:
0    0103
1    1040
2    1054
3    1065
4    0107
Name: SSIC, dtype: object

你可能不需要調用astype如果dtype已經是str

使用 dataframe.at[] 函數。 那是:

df.at[row_index,column_name] = '所需的分配'

例如:

df = pd.DataFrame(data=[['iqbal',2,88]],columns=['name','roll','marks'],index=[0])
df.at[0,'name']= 'Joy'

`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM