如何防止“pandas.read_csv”用arg 'dtype= np.float32'将索引列转换为浮点型?

vwhgwdsa  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(190)

我有一个供Pandas阅读的CSV文件,格式如下:

name,   quart2c,    p_rat,  other_col
avg,    1,          2,      3
std,    1,          2,      3

我想pandas.read_csv()保证所有单元格都有float32类型,除了第一列('name '),因为那是索引列。
因此,我传递了两个参数给它,如下所示:

pandas.read_csv(file_path, index_col=0, dtype=np.float32)

# or like this, both failed
pandas.read_csv(file_path, index_col='name', dtype=np.float32)

但是panda仍然尝试将第一列转换为float,并引发了一个异常:
ValueError:无法将字符串转换为浮点数:'平均值'
我想要的:

  1. CSV文件是由我自己编码的另一个程序制作的,如果结构不对,我可以很容易地调整它。
    1.我希望总是指定arg dtype=np.float32,以便检查是否有任何错误值。我不希望这些值也被解释为整数类型。
    1.索引栏“name”应该保留为index_col,因为稍后会用到它。无论如何,这个栏应该被切断。
    我该怎么拿呢?
w8f9ii69

w8f9ii691#

最好的方法是先用默认的args读入csv,给出index col,然后转换整个df(这不会影响index):

pd.read_csv(file_path, index_col='name').astype(float)
pb3s4cty

pb3s4cty2#

您可以使用dtypeconverters尝试这种方法。

import pandas as pd
df = pd.read_csv('test.csv', dtype = 'float32', converters = {'name': str},index_col='name')  
print(df)

输出:

quart2c      p_rat    other_col
name                                    
avg          1.0        2.0          3.0
std          1.0        2.0          3.0

相关问题