gpt4 book ai didi

python - 如何使用pandas.read_csv()将索引数据作为字符串读取?

转载 作者:行者123 更新时间:2023-12-03 18:32:33 25 4
gpt4 key购买 nike

我正在尝试使用 Pandas 将 csv 文件作为 DataFrame 读取,并且我想将索引行读取为字符串。但是,由于 index 的行没有任何字符,pandas 将这些数据作为整数处理。如何读取字符串?

这是我的 csv 文件和代码:

[sample.csv]    
uid,f1,f2,f3
01,0.1,1,10
02,0.2,2,20
03,0.3,3,30

[code]
df = pd.read_csv('sample.csv', index_col="uid" dtype=float)
print df.index.values

结果: df.index 是整数,而不是字符串:
>>> [1 2 3]

但我想得到 df.index 作为字符串:
>>> ['01', '02', '03']

还有一个额外的条件:其余的索引数据必须是数值,而且它们实际上太多了,我无法用特定的列名指向它们。

最佳答案

传递dtype参数以指定dtype:

In [159]:
import pandas as pd
import io
t="""uid,f1,f2,f3
01,0.1,1,10
02,0.2,2,20
03,0.3,3,30"""
df = pd.read_csv(io.StringIO(t), dtype={'uid':str})
df.set_index('uid', inplace=True)
df.index

Out[159]:
Index(['01', '02', '03'], dtype='object', name='uid')

所以在你的情况下 以下应该工作 :
df = pd.read_csv('sample.csv', dtype={'uid':str})
df.set_index('uid', inplace=True)

单行等效项不起作用 ,因为这里的 pandas bug 仍然突出,其中 dtype 参数在将被视为索引的列上被忽略**:
df = pd.read_csv('sample.csv', dtype={'uid':str}, index_col='uid')

如果我们假设第一列是索引列,您可以动态执行此操作:
In [171]:
t="""uid,f1,f2,f3
01,0.1,1,10
02,0.2,2,20
03,0.3,3,30"""
cols = pd.read_csv(io.StringIO(t), nrows=1).columns.tolist()
index_col_name = cols[0]
dtypes = dict(zip(cols[1:], [float]* len(cols[1:])))
dtypes[index_col_name] = str
df = pd.read_csv(io.StringIO(t), dtype=dtypes)
df.set_index('uid', inplace=True)
df.info()

<class 'pandas.core.frame.DataFrame'>
Index: 3 entries, 01 to 03
Data columns (total 3 columns):
f1 3 non-null float64
f2 3 non-null float64
f3 3 non-null float64
dtypes: float64(3)
memory usage: 96.0+ bytes

In [172]:
df.index

Out[172]:
Index(['01', '02', '03'], dtype='object', name='uid')

在这里,我们只读取标题行以获取列名:
cols = pd.read_csv(io.StringIO(t), nrows=1).columns.tolist()

然后我们用所需的数据类型生成列名的字典:
index_col_name = cols[0]
dtypes = dict(zip(cols[1:], [float]* len(cols[1:])))
dtypes[index_col_name] = str

我们得到索引名称,假设它是第一个条目,然后从其余的 cols 创建一个 dict 并将 float 分配为所需的 dtype 并添加指定类型为 str 的索引 col,然后您可以将其作为 dtype 参数传递到 read_csv

关于python - 如何使用pandas.read_csv()将索引数据作为字符串读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35058435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com