Python to_csv在zipcode前面缺少0

时间:2018-02-15 21:38:18

标签: python pandas csv dataframe

我有一个数据框

USER =

   zipcode  userCount
0   00601   5
1   00602   23
2   00603   53
3   00604   2
4   00605   6
5   00606   10
6   00610   8
7   00612   33
8   00613   2
9   00614   2
10  00616   1
11  00617   9
12  00622   6
13  00623   28
14  00624   10
15  00627   8
16  00631   1
17  00637   13
18  00638   9
19  00641   12
20  00646   13

当我保存时

USER.to_csv('Total_user.csv',index = False)

我在邮政编码面前丢失了0。 00601 - > 601

zipcode userCount
601 5
602 23
603 53
604 2
605 6
606 10
610 8
612 33
613 2
614 2
616 1
617 9
622 6
623 28
624 10
627 8
631 1
637 13
638 9
641 12
646 13

在to_csv行中我错过了什么?我只想在csv前面保存0。然后当我read_csv(low_memory = False)然后zipcode具有正常格式。

3 个答案:

答案 0 :(得分:1)

假设第一个数据帧的列df['zipcode']已经是一列字符串,则以这种方式保存:

>>> df.to_csv('zipcodes.csv',dtype={'zipcode':'str','userCount':int})

然后在阅读时,将所有数据类型设置为str,然后转换那些不是这样的数据类型:

>>> pd.read_csv('zipcodes.csv',dtype='str',index_col=0)

   zipcode userCount
0    00601         5
1    00602        23
2    00603        53
3    00604         2
4    00605         6
5    00606        10
6    00610         8
7    00612        33
8    00613         2
9    00614         2
10   00616         1
11   00617         9
12   00622         6
13   00623        28
14   00624        10
15   00627         8
16   00631         1
17   00637        13
18   00638         9
19   00641        12
20   00646        13

>>> df['userCount'] = df['userCount'].astype(int)

>>> df.dtypes

zipcode      object
userCount     int64
dtype: object

答案 1 :(得分:0)

您的数据可能作为对象类型存储在数据框中。您可以通过输入以下内容来确认:

df.dtypes
>>> zipCode      object
    userCount    object
    dtype: object

Python不喜欢0前缀整数,因此对象dtype。保存时,您需要引用数据。您可以通过read_csv()

中的quoting参数执行此操作
import csv
df.to_csv('tmp.csv', quoting=csv.QUOTE_NONNUMERIC)

如果您没有引用您的数据,当您重新阅读并剥离前导零时,pandas会将其转换为整数。

答案 2 :(得分:0)

请使用dtype=str作为read_csv(file,sep,dtype=str)方法的参数。

这将解决问题。