2024-04-19 06:06:25 发布
网友
我正在使用read_csv将研究数据导入熊猫数据框。
read_csv
我的科目代码是6个数字,其中包括出生日期。对于我的一些主题,这会产生一个前导零的代码(例如“010816”)。
当我导入到Pandas中时,前导零被去掉,列的格式为int64。
int64
是否有方法将此列导入为字符串而不更改?
我尝试为列使用自定义转换器,但它不起作用-似乎自定义转换是在Pandas转换为int之前进行的
正如Lev Landau在this question/answer中指出的,对于read_csv函数中的某一列使用converters选项可能是一个简单的解决方案。
converters
converters={'column_name': lambda x: str(x)}
您可以参考pandas.io.parsers.read_csvdocumentation中的read_csv函数的更多选项。
假设我有csv文件projects.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:~$
如果您有很多列,而您不知道哪些列包含前导零,可能会遗漏,或者您可能只需要自动化您的代码。您可以执行以下操作:
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)
通过这样做,您将所有列都作为字符串,并且不会丢失任何前导零。
下面是一个更短、更健壮、工作更充分的解决方案:
只需定义变量名和所需数据类型之间的映射(字典):
dtype_dic= {'subject_id': str, 'subject_number' : 'float'}
将该映射与pd.read_csv()一起使用:
pd.read_csv()
df = pd.read_csv(yourdata, dtype = dtype_dic)
等一下!
正如Lev Landau在this question/answer中指出的,对于
read_csv
函数中的某一列使用converters
选项可能是一个简单的解决方案。您可以参考pandas.io.parsers.read_csvdocumentation中的
read_csv
函数的更多选项。假设我有csv文件
projects.csv
,如下所示:例如,下面的代码正在修剪前导零:
结果:
解决方案代码示例:
所需结果:
如果您有很多列,而您不知道哪些列包含前导零,可能会遗漏,或者您可能只需要自动化您的代码。您可以执行以下操作:
你也可以:
通过这样做,您将所有列都作为字符串,并且不会丢失任何前导零。
下面是一个更短、更健壮、工作更充分的解决方案:
只需定义变量名和所需数据类型之间的映射(字典):
将该映射与
pd.read_csv()
一起使用:等一下!
相关问题 更多 >
编程相关推荐