我正在阅读pandas DataFrame
using pd.read_csv
。我想将第一行保留为数据,但是它不断转换为列名。
- 我试过
header=False
了,但这只是完全删除了它。
(注意我的输入数据:我有一个字符串(st = '\n'.join(lst)
),我将其转换为类似文件的对象( ),然后从该文件对象io.StringIO(st)
构建。)csv
我正在阅读pandas DataFrame
using pd.read_csv
。我想将第一行保留为数据,但是它不断转换为列名。
header=False
了,但这只是完全删除了它。(注意我的输入数据:我有一个字符串(st = '\n'.join(lst)
),我将其转换为类似文件的对象( ),然后从该文件对象io.StringIO(st)
构建。)csv
您希望header=None
将False
获取类型提升int
到0
查看文档重点我的:
标题:整数或整数列表,默认“推断”行号用作列名,以及数据的开头。如果没有传递名称,则默认行为就像设置为 0 一样,否则设置为None。显式传递 header=0 以便能够替换现有名称。标头可以是一个整数列表,指定列上多索引的行位置,例如 [0,1,3]。将跳过未指定的中间行(例如,跳过此示例中的 2)。请注意,如果skip_blank_lines=True,此参数将忽略注释行和空行,因此header=0 表示数据的第一行而不是文件的第一行。
您可以看到行为上的差异,首先是header=0
:
In [95]:
import io
import pandas as pd
t="""a,b,c
0,1,2
3,4,5"""
pd.read_csv(io.StringIO(t), header=0)
Out[95]:
a b c
0 0 1 2
1 3 4 5
现在有了None
:
In [96]:
pd.read_csv(io.StringIO(t), header=None)
Out[96]:
0 1 2
0 a b c
1 0 1 2
2 3 4 5
请注意,在最新版本0.19.1
中,这将引发TypeError
:
In [98]:
pd.read_csv(io.StringIO(t), header=False)
TypeError:将布尔值传递给标头无效。使用 header=None 表示没有标题或 header=int 或类似列表的整数来指定组成列名的行
我认为你需要header=None
参数read_csv
:
样本:
import pandas as pd
from pandas.compat import StringIO
temp=u"""a,b
2,1
1,1"""
df = pd.read_csv(StringIO(temp),header=None)
print (df)
0 1
0 a b
1 2 1
2 1 1
如果您pd.ExcelFile
用于阅读所有 excel 文件表,则:
df = pd.ExcelFile("path_to_file.xlsx")
df.sheet_names # Provide the sheet names in the excel file
df = df.parse(2, header=None) # Parsing the 2nd sheet in the file with header = None
df
输出:
0 1
0 a b
1 1 1
2 0 1
3 5 2
您可以设置自定义列名以防止这种情况:
假设您的数据集中有两列,那么:
df = pd.read_csv(your_file_path, names = ['first column', 'second column'])
如果您有多个并且可以在名称属性前面传递一个列表,您还可以以编程方式生成列名。