首先,我是Python的新手,所以我不是专家...
这是我的问题。我有这个数据框:
CODE_IRIS PDL_RESIDENTIEL PDL_TOTAL CONSO_RESIDENTIEL CONSO_TOTALE
0 10040101 500 510 11264 26677
1 10040102 806 809 16234 17318
2 10040201 921 925 14451 17065
3 10040202 937 943 13036 19516
4 10049999 94 94 1287 1287
问题是,CODE_IRIS
是object
,应该有9个字符,如下所示:
CODE_IRIS PDL_RESIDENTIEL PDL_TOTAL CONSO_RESIDENTIEL CONSO_TOTALE
17861 766810113 588 593 9344 14743
因此,当0
中的字符长度小于9时,我需要传递前缀CODE_IRIS
,就像在Excel中使用公式=IF(LEN([@[Code IRIS]]) < 9; 0&[@[Code IRIS]]; [@[Code IRIS]])
一样。
现在,当我尝试使用elec.loc[elec['CODE_IRIS'].str.len() < 9]
查找只有8个字符的值时,得到的结果是:
Out[393]:
Empty DataFrame
Columns: [CODE_IRIS, PDL_RESIDENTIEL, PDL_TOTAL, CONSO_RESIDENTIEL, CONSO_TOTALE]
Index: []
然后,当我尝试使用elec['CODE_IRIS'].str.len()
查看每个值多长时间时,得到的结果是:
Out[396]:
0 NaN
1 NaN
...
Name: CODE_IRIS, Length: 23905, dtype: float64
尽管CODE_IRIS
列绝对是object
,如您在此处看到的那样:
elec.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 23905 entries, 0 to 23904
Data columns (total 5 columns):
CODE_IRIS 23905 non-null object
PDL_RESIDENTIEL 23905 non-null int64
PDL_TOTAL 23905 non-null int64
CONSO_RESIDENTIEL 23905 non-null int64
CONSO_TOTALE 23905 non-null int64
dtypes: int64(4), object(1)
memory usage: 1.1+ MB
我不明白。有人可以解释我怎么了吗?
(我希望我已使自己尽可能容易理解)。 谢谢!
答案 0 :(得分:0)
您可以仅在每个CODE_IRIS
上使用zfill
:
df['CODE_IRIS'] = df['CODE_IRIS'].map(lambda x: str(x).zfill(9))