熊猫CSV导入:保持前导零一列(Pandas csv-import: Keep leading ze

2019-06-18 21:44发布

我使用进口的研究数据为大熊猫数据帧read_csv

我的主题代码是6位数字编码,除其他外,诞生的那天。 对于我的一些科目,这导致代码带前导零(例如“010816”)。

当我导入到大熊猫,前导零被剥离和列被格式化为int64

有没有一种方法来导入此列不变,也许作为一个字符串?

我试图用一个自定义转换为列,但它不工作 - 它好像自定义转换发生大熊猫转换为int之前。

Answer 1:

正如指出这个问题/答案由朗道 ,有可能是一个简单的解决方案使用converters选项中某列的read_csv功能。

converters={'column_name': lambda x: str(x)}

你可以参考更多的选择read_csv pandas.io.parsers.read_csv在funtion 文档 。

可以说我有csv文件projects.csv象下面这样:

project_name,project_id
Some Project,000245
Another Project,000478

如对实施例以下代码修边前导零:

import csv
from pandas import read_csv

dataframe = read_csv('projects.csv')
print dataframe

结果:

me@ubuntu:~$ python test_dataframe.py 
      project_name  project_id
0     Some Project         245
1  Another Project         478
me@ubuntu:~$

解决方案的代码示例:

import csv
from pandas import read_csv

dataframe = read_csv('projects.csv', converters={'project_id': lambda x: str(x)})
print dataframe

所需的结果:

me@ubuntu:~$ python test_dataframe.py 
      project_name project_id
0     Some Project     000245
1  Another Project     000478
me@ubuntu:~$


Answer 2:

这里是一个短,功能强大和全面工作液:

简单地定义的变量名和所需的数据类型之间的映射(字典):

dtype_dic= {'subject_id': str, 
            'subject_number' : 'float'}

使用与该映射pd.read_csv()

df = pd.read_csv(yourdata, dtype = dtype_dic)

瞧!



Answer 3:

如果你有很多列的,你不知道哪些包含可能被遗漏前导零,或者你可能只需要自动化代码。 你可以做到以下几点:

df = pd.read_csv("your_file.csv", nrows=1) # Just take the first row to extract the columns' names
col_str_dic = {column:str for column in list(df)}
df = pd.read_csv("your_file.csv", dtype=col_str_dic) # Now you can read the compete file

你也可以这样做:

df = pd.read_csv("your_file.csv", dtype=str)

通过这样做,你将有你所有的列作为字符串,你不会失去任何前导零。



Answer 4:

我不认为你可以指定一栏键入您希望的方式(如果还没有改变reciently如果6位数字是不是你可以转换为datetime的日期)。 你可以尝试使用np.genfromtxt()并创建DataFrame从那里。

编辑:看看韦斯麦金尼的博客 ,可能有东西给你。 这似乎是不存在从一个新的解析器pandas 0.10十一月到来。



Answer 5:

您可以使用converters到数字转换为固定的宽度,如果你知道的宽度。

例如,如果宽度是5,则

data = pd.read_csv('text.csv', converters={'column1': lambda x: f"{x:05}"})

这将这样的伎俩。 它适用于大熊猫== 0.23.0也read_excel

Python3.6或更高的要求。



文章来源: Pandas csv-import: Keep leading zeros in a column