如何为蟒蛇熊猫数据帧创建索引?



我正在使用Jupyter notebook和pandas将几个csv文件导入python,有些文件是在没有适当的索引列的情况下创建的。相反,使用第一列,即我需要操作的数据。如何创建常规索引列作为第一列?这似乎是一件微不足道的事情,但我在任何地方都找不到任何有用的帮助。

我的数据帧是什么样子的

我的数据帧应该是什么样子的

你能试试这个吗:

df.reset_index(inplace = True, drop = True)

让我知道这是否有效。

当您在 csv 中阅读时,请使用pandas.read_csv(index_col= #, * args).如果它们没有正确的索引列,请设置index_col=False

若要更改现有数据帧df的索引,请尝试方法df = df.reset_index()df=df.set_index(#)

导入 csv 时,是否使用了index_col参数?根据文档,它应该默认为None。如果你不使用这个参数,你应该没问题。

无论哪种方式,您都可以通过使用index_col=False强制它不使用列。从文档中:

注意:index_col=False 可用于强制 pandas 不使用第一列作为索引,例如,当您有一个格式错误的文件,每行末尾都有分隔符时。

由于您正在阅读一些带有索引的 csv,而一些没有索引,并且似乎事先不知道哪些有索引以及它的名称是什么,我不会在pandas.read_csv()中使用index_col,因为将其设置为False会忽略(潜在(现有索引并将其设置为True似乎也不适用于该问题, 因为索引名称未知或没有索引。我也不会像上面建议的那样直接使用data.reset_index(inplace=True)

如果data是数据帧,我将从以下检查开始:

if "Unnamed: 0" in data:
data.drop("Unnamed: 0", axis=1, inplace=True)

因为在尝试执行此操作时,此不需要的索引列可能已添加到数据中。

为了维护旧索引,我会用data.index.name收集它们的名称,然后用

data.rename(columns={"indexname1": "raw_index"}, inplace=True)
data.rename(columns={"indexname2": "raw_index"}, inplace=True)
....

对于血统。

然后

data.reset_index(inplace=True)

将为每个数据帧创建一个新索引。如果最好只为没有索引的数据帧创建新索引,那么您可以对没有索引的 dfs 执行前面的reset_index命令,并对其余部分执行data.set_index('indexname1')data.set_index('indexname2')等操作。

但是,为了使数据读取更具可持续性且不那么乏味,同时保持沿袭(例如,旧索引(,我强烈建议将所有数据帧再次写入文件。通过上述步骤规范化索引后,第一列确实是现在的(新/旧(索引,然后:

data.to_csv(filepath, index=True)

将确保从下次开始,可以使用以下命令读取数据:

data = pd.read_csv(index_col=0)

因此,所有数据帧都将将其第一列设置为索引,这可以使项目中的其余代码变得不那么复杂。

Python 3.8.5

熊猫==1.2.4

pd.read_csv('file.csv', header=None)

我在文档中找到了解决方案:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

最新更新