我有一个带有代表生日的整数列的数据格式。每一行都有20 xx或19 xx,但有些行只包含xx部分。
我要做的是在这些数字前面加上19,如果整数大于22 (从0开始),则只有2个“elemet”,或者/并在小于或等于22的数字前面加20。
这就是我写的;
for x in DF.loc[DF["Year"] >= 2022]:
x + 1900
if:
x >= 22
else:
x + 2000
你也可以完全改变代码,我只想让你解释一下你的代码到底是做什么的。
谢谢大家花时间来回答这个问题。
发布于 2022-03-16 10:52:05
与其迭代行,不如使用where
来更改整个列:
y = df["Year"] # just to save typing
df["Year"] = y.where(y > 99, (y + 1900).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
发布于 2022-03-16 10:03:39
这基本上就是你所做的,一个if
在一个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"]]]
发布于 2022-03-16 10:10:23
您可以使用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
https://stackoverflow.com/questions/71494657
复制相似问题