熊猫读入没有头的表

我怎么能读在一个.csv文件(没有标题),当我只想要一个子集的列(说第4和第7的总数20列),使用熊猫?我似乎不能做usecols

598616 次浏览

确保你指定了传递header=None,并为第4列和第7列添加usecols=[3,6]

为了读取一个没有标题且只针对某些列的csv,你需要为第4列和第7列传递参数header=Noneusecols=[3,6]:

df = pd.read_csv(file_path, header=None, usecols=[3,6])

参见文档

以前的答案是正确的,但在我看来,一个额外的names参数将使其完美,这应该是推荐的方式,特别是当csv没有headers时。

解决方案

使用usecolsnames参数

df = pd.read_csv(file_path, usecols=[3,6], names=['colA', 'colB'])

更多的阅读

或者使用header=None显式地告诉人们csv没有头文件(无论如何这两行都是相同的)

df = pd.read_csv(file_path, usecols=[3,6], names=['colA', 'colB'], header=None)

这样你就可以通过

# with `names` parameter
df['colA']
df['colB']

而不是

# without `names` parameter
df[0]
df[1]

解释

基于read_csv,当显式传递names时,则header将表现为None而不是0,因此当names存在时可以跳过header=None

根据文档https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html: Headerint, int列表,默认' infer ' 要用作列名的行号和数据的开头。默认行为是推断列名:如果没有传递名称,则行为与header=0相同,并且从文件的第一行推断列名,如果显式传递列名,则行为与header=None相同。显式地传递header=0以替换现有的名称。标头可以是一个整数列表,用于指定列上多索引的行位置,例如[0,1,3]。未指定的中间行将被跳过(例如,本例中的2被跳过)。注意,如果skip_blank_lines=True,该参数将忽略注释行和空行,因此header=0表示数据的第一行,而不是文件的第一行 < p > namesarray-like,可选的 要使用的列名列表。如果文件包含标题行,则应该显式传递header=0以覆盖列名。

.在此列表中不允许重复
columts = ['Day', 'PLMN', 'RNCname']
tempo = pd.read_csv("info.csv", sep=';', header=0, names=columts, index_col=False)