我有一個簡單的腳本在資料框中轉換資料:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A':[123,None,456],
'B':[3698,598,None]})
def pad_value(item):
if item == None or item == np.nan:
return None
else:
return str(item).zfill(7)
df['A'] = df['A'].apply(lambda x: pad_value(x))
df['B'] = df['B'].apply(lambda x: pad_value(x))
以上似乎作業正常。我嘗試將最后兩行重寫為:
cols = ['A', 'B']
df[cols] = df[cols].apply(lambda x: pad_value(x))
但是,這會失敗并給出一個值錯誤:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
- 我試圖理解為什么不能以上述方式使用它。
- 我的 pad_value 函式看起來很笨重——我想知道是否有更簡潔的方法來實作同樣的目標?
謝謝
uj5u.com熱心網友回復:
首先用于測驗缺失值或None使用isna,用于元素處理使用DataFrame.applymap:
def pad_value(item):
if pd.isna(item):
return None
else:
return str(item).zfill(7)
cols = ['A', 'B']
df[cols] = df[cols].applymap(pad_value)
使用示例資料創建浮點數,這里是轉換為沒有.0andNaN和s 的字串的解決方案None,None最后處理Series.str.zfill(也與None/NaNs 一起使用)
df = pd.DataFrame({
'A':[123,None,456],
'B':[3698,598,None]})
cols = ['A', 'B']
df[cols] = (df[cols].astype('Int64')
.astype(str)
.mask(df.isna(), None)
.apply(lambda x: x.str.zfill(7))
print (df)
A B
0 0000123 0003698
1 None 0000598
2 0000456 None
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/431702.html
下一篇:R資料框中的滾動條件ifelse
