我正在尝试使用pandas
将csv读取到新的数据帧中。许多列可能只包含数字值,但我仍然希望将它们作为字符串/对象导入,而不是使用浮点类型的列。
我正在尝试编写一些python脚本进行数据转换/迁移。我不是高级Python程序员,并且在学习需要解决的问题时主要是学习。
我要导入的csvs具有可变的列数,甚至具有不同的列标题,并且以任何顺序,我无法控制它们,因此我无法使用dtype
参数显式指定数据类型read_csv
。我只希望将导入的任何列都视为对象数据类型,以便可以进一步分析其数据质量。
示例是我尝试过的CSV上的'Staff ID'
和'License Number'
列,这些列应该是包含7位ID的字符串字段,并以float64类型导入。
我尝试将astype
与read_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
答案 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')