无法基于熊猫数据框中的条件在值上添加前缀

时间:2019-02-11 18:31:10

标签: python pandas

首先,我是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_IRISobject,应该有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

我不明白。有人可以解释我怎么了吗?

(我希望我已使自己尽可能容易理解)。 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以仅在每个CODE_IRIS上使用zfill

df['CODE_IRIS'] = df['CODE_IRIS'].map(lambda x: str(x).zfill(9))