如何在读取带有或不带有索引列的CSV时自动将索引设置为Pandas DataFrame



假设我有两个CSV文件。第一个input_1.csv有一个索引列,所以当我运行时

import pandas as pd
df_1 = pd.read_csv("input_1.csv")
df_1

我得到一个带有索引列的DataFrame,以及一个名为Unnamed: 0的列,它与索引列相同。我可以通过添加参数index_col=0来防止这种重复,一切都很好。

第二个文件input_2.csv没有索引列,也就是说,它看起来像这样:

|   stuff |   things |
|--------:|---------:|
|       1 |       10 |
|       2 |       20 |
|       3 |       30 |
|       4 |       40 |
|       5 |       50 |

运行pd.read_csv("input_2.csv")会给我一个带有索引列的DataFrame。在这种情况下,添加index_col=0参数将在索引列中设置为stuff,就像在CSV文件本身中一样。

我的问题是,我有一个包含read_csv部分的函数,无论在哪种情况下,我都希望它返回一个带有索引列的DataFrame。有没有一种方法可以检测输入文件是否有索引列,如果没有则设置一个,如果有则不执行任何操作?

CSV没有内置的";索引";专栏,所以我认为答案是这在一般情况下是不可能的。

如果你能说";仅在未命名的情况下使用0作为索引";,但潘达斯并没有给我们这样的选择。

因此,您可能只需要检查是否出现Unnamed:列,并将这些列设置为索引。

索引,我希望您指的是序列号从01开始的列。

若第一列符合索引列的条件,您可以使用某种导入后逻辑来决定:

逻辑是,若所有行的默认索引和第一列之间的差异相同,则第一列包含递增序列(从任意数字开始(。先决条件是列应该是数字。

例如:

idx value
0    1     a
1    2     b
2    3     c
3    4     d
4    5     e
5    6     f
pd.api.types.is_numeric_dtype(df[df.columns[0]])
>> True
np.array(df.index) - df.iloc[:,0].values
>> array([-1, -1, -1, -1, -1, -1])
# If all values are equal
len(pd.Series(np.array(df.index) - df.iloc[:,0].values).unique()) == 1
>> True

相关内容

  • 没有找到相关文章

最新更新