尝试从带有对象数据类型的csv中使用pandas导入所有列

时间:2019-07-04 00:43:38

标签: python pandas csv dataframe

我正在尝试使用pandas将csv读取到新的数据帧中。许多列可能只包含数字值,但我仍然希望将它们作为字符串/对象导入,而不是使用浮点类型的列。

我正在尝试编写一些python脚本进行数据转换/迁移。我不是高级Python程序员,并且在学习需要解决的问题时主要是学习。

我要导入的csvs具有可变的列数,甚至具有不同的列标题,并且以任何顺序,我无法控制它们,因此我无法使用dtype参数显式指定数据类型read_csv。我只希望将导入的任何列都视为对象数据类型,以便可以进一步分析其数据质量。

示例是我尝试过的CSV上的'Staff ID''License Number'列,这些列应该是包含7位ID的字符串字段,并以float64类型导入。

我尝试将astyperead_csv一起使用,并在导入后将映射应用于数据框

请注意,对于数据的类型或质量的内容并没有严格的规定,这就是为什么我要始终将其作为对象的dtype导入的原因。

在此先感谢任何可以帮助我解决这个问题的人。

我已使用以下代码来读入它。

import pandas as pd
df = pd.read_csv("agent.csv",encoding="ISO-8859-1")

这会在'License Number'中创建类型为df的{​​{1}}列。

以下是许可证号示例,应为字符串:

float64被存储为'1275595'

在导入后将其转换回1275595.0中的字符串/对象,将其更改回df

2 个答案:

答案 0 :(得分:1)

它应该停止转换数据。

pd.read_csv(..., dtype=str)

文档:read_csv

dtype: ...  Use str or object together with suitable na_values settings 
            to preserve and not interpret dtype. 

答案 1 :(得分:0)

我建议您将csv读取过程分为多个专用功能。

例如:

import pandas as pd

# Base function for reading a csv. All the parsing/formatting is done here
def read_csv(file_content, header=False, columns=None, encoding='utf-8'):
    df = pd.read_csv(file_content, header=header, encoding=encoding)
    df.columns = columns
    return df

# Function with a specific purpose as stated in the name.
def read_csv_license_plates(file_content, encoding='utf-8'):
    columns = ['col1', 'col2', 'col3']
    df = read_csv(file_content, True, columns)
    return df

read_csv_license_plates('agent.csv', encoding='ISO-8859-1')