使用Pandas读取CSV时,如何保持列中的前导零?

2024-05-28 23:15:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用read_csv将研究数据导入熊猫数据框

我的主题代码是6个数字编码,其中包括出生日期。对于我的一些主题,这会导致一个前导为零的代码(例如“010816”)

当我导入Pandas时,前导零被去掉,列的格式为int64

是否有方法将此列导入为字符串

我尝试为列使用自定义转换器,但它不起作用-似乎自定义转换发生在Pandas转换为int之前


Tags: csv数据方法字符串代码pandas主题read
3条回答

以下是一个简短、健壮且完全有效的解决方案:

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

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

将该映射与pd.read_csv()一起使用:

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

如果您有很多列,但不知道哪些列包含可能遗漏的前导零,或者您可能只需要自动化代码。您可以执行以下操作:

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)

通过这样做,您将所有列都作为字符串,并且不会丢失任何前导零

正如Lev Landauthis question/answer中指出的那样,对于read_csv函数中的某个列使用converters选项可能是一个简单的解决方案

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

您可以在pandas.io.parsers.read_csvdocumentation中参考read_csv功能的更多选项

假设我有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:~$

在帮助他人时更新:

要将所有列作为str,可以这样做(从注释中):

pd.read_csv('sample.csv', dtype = str)

要将大多数或选择性列作为str,可以执行以下操作:

# lst of column names which needs to be string
lst_str_cols = ['prefix', 'serial']
# use dictionary comprehension to make dict of dtypes
dict_dtypes = {x : 'str'  for x in lst_str_cols}
# use dict on dtypes
pd.read_csv('sample.csv', dtype=dict_dtypes)

相关问题 更多 >

    热门问题