我有一個資料框,其中有一串列示出生年份的整數。每行有 20xx 或 19xx,但有些行只有 xx 部分。
如果整數大于 22(從 0 開始),我想做的是在那些只有 2 個“元素”的數字前面加上 19,或者/和在小于或等于 22 的數字前面加上 20。
這就是我寫的;
for x in DF.loc[DF["Year"] >= 2022]:
x 1900
if:
x >= 22
else:
x 2000
您也可以完全更改代碼,我只是想讓您解釋一下您的代碼到底是做什么的。
感謝所有花時間回答這個問題的人。
uj5u.com熱心網友回復:
而不是遍歷行,用于where更改整個列:
y = df["Year"] # just to save typing
df["Year"] = y.where(y > 99, (1900 y).where(y > 22, y 2000))
或索引:
df["Year"][df["Year"].between(0, 21)] = 2000
df["Year"][df["Year"].between(22, 99)] = 1900
或loc:
df.loc[df["Year"].between(0, 21), "Year"] = 2000
df.loc[df["Year"].between(22, 99), "Year"] = 1900
uj5u.com熱心網友回復:
您可以使用該方法在一行中完成apply。
例子:
df = pd.DataFrame({'date': [2002, 95, 1998, 3, 56, 1947]})
print(df)
date
0 2002
1 95
2 1998
3 3
4 56
5 1947
然后:
df = df.date.apply(lambda x: x 1900 if (x<100) & (x>22) else (x 2000 if (x<100)&(x<22) else x) )
print(df)
date
0 2002
1 1995
2 1998
3 2003
4 1956
5 1947
uj5u.com熱心網友回復:
這基本上就是你所做的,一個if內部 a for:
new_list_of_years = []
for year in DF.loc[DF["Year"]:
full_year = year 1900 if year >22 else year 2000
new_list_of_years.append(full_year)
DF['Year'] = pd.DataFrame(new_list_of_years)
編輯:您也可以使用for-if串列理解來做到這一點:
DF['Year'] = [year 1900 if year > 22 else year 2000 for year in DF.loc[DF["Year"]]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/444921.html
