我正在使用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