我有一个csv文件。test.csv
1,1,1,1
我想把它作为变量加载。
我代码:
import pandas as pd
ch_file=pd.read_csv("test.csv")
ch1_value=ch_file.columns[0]
ch2_value=ch_file.columns[1]
ch3_value=ch_file.columns[2]
ch4_value=ch_file.columns[3]
print(ch1_value, ch2_value, ch3_value,
ch4_value)
输出为1,1.1,1,1.1
为什么不打印1,1,1,1
.1
从哪里来?
您想要提取什么?仅仅是数字?
pandas.read_csv
将列名重写为唯一的,因此它将为此添加.1
,.2
等。理论上,您可以传递mangle_dupe_cols=False
选项,但目前还不支持。
另一种方法是传递header=None
并获取第一行的值:
pd.read_csv('test.csv', header=None).iloc[0]
在你的例子中:
ch1_value, ch2_value, ch3_value, ch4_value = pd.read_csv('test.csv', header=None).iloc[0]
但是,老实说,你真的需要pandas
吗?你可以直接在纯python中做:
with open('test.csv') as f:
ch1_value, ch2_value, ch3_value, ch4_value = map(int, f.readline().split(','))
你有两个问题:
-
当您使用
read_csv
时,第一行被解释为列标题。如果你没有通过header=None
,你必须通过。 -
ch_file.columns[2]
返回列名而不是值。请使用.iloc
。
ch_file = pd.read_csv('test.csv', sep=',', header=None)
ch1_value=ch_file.iloc[0, 0]
ch2_value=ch_file.iloc[0, 1]
ch3_value=ch_file.iloc[0, 2]
ch4_value=ch_file.iloc[0, 3]
print(ch1_value, ch2_value, ch3_value, ch4_value)
输出:
1 1 1 1