我遇到了這個特定的問題,我有一個 ID 號資料框。其中一些帳號已洗掉前導零。資料框是df。
ID
345
345
543
000922
000345
000345
000543
所以我想做的是創建一種通用的方法來檢查我們是否洗掉了前導零。所以基本上,在我的真實資料集中會有數百萬行。因此,我想使用 pandas 方法來說明是否有一部分 ID 與帶有零的部分匹配,以便將其放入另一個資料框中,以便我進一步檢查。
我這樣做:
new_df = df.loc[df['ID'].isin(df['ID'])]
我的理由是我想過濾該資料集以查找是否有任何 ID 在完整 ID 內。
我現在有
ID
345
345
543
000345
000345
000543
我可以使用 .unique() 來獲得一系列每個獨特的組合。
ID
345
543
000345
000543
這對于小型資料集來說很好。但是對于數百萬行,我想知道如何才能更輕松地進行此檢查。
我試圖找到一種方法來創建一個字典,其中鍵是 3 位數字,值是它的完整 ID。或相反亦然。對此的任何提示將不勝感激。如果有人對檢查丟棄的零的不同想法也有任何提示,除了字典方法,那也很有幫助。
注意:它并不總是 3 位數字。例如,可能是 4567,其中實際值為 004567。
uj5u.com熱心網友回復:
一種選擇是去除前導“0”:
out = df['ID'].str.lstrip('0').unique()
輸出:
array(['345', '543', '922'], dtype=object)
或在前面加上“0”:
out = df['ID'].str.zfill(df['ID'].str.len().max()).unique()
輸出:
array(['000345', '000543', '000922'], dtype=object)
uj5u.com熱心網友回復:
采用:
print (df)
ID
0 345
1 345
2 540
3 2922
4 002922
5 000344
6 000345
7 000543
#filter ID starting by 0 to Series
d = df.loc[df['ID'].str.startswith('0'), 'ID']
#create index in Series with remove zeros from left side
d.index = d.str.lstrip('0')
print (d)
ID
2922 002922
344 000344
345 000345
543 000543
Name: ID, dtype: object
#dict all possible values
print (d.to_dict())
{'2922': '002922', '344': '000344', '345': '000345', '543': '000543'}
#compare if exist indices in original ID column and create dict
d = d[d.index.isin(df['ID'])].to_dict()
print (d)
{'2922': '002922', '345': '000345', '543': '000543'}
uj5u.com熱心網友回復:
您可以將列型別轉換為 int
m = df['ID'].ne(df['ID'].astype(int))
print(m)
0 False
1 False
2 False
3 True
4 True
5 True
Name: ID, dtype: bool
print(df[m])
ID
3 000345
4 000345
5 000543
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/472470.html
上一篇:如何根據上面行的值迭代每一行?
