小编Reb*_*kah的帖子

pandas - 将索引类型从 RangeIndex 转换为 Int64Index

如何将 RangeIndex 类型转换为 Int64Index 类型?我有两个数据框,都以相同的方式从 .csv 文件导入。Pandas 会自动将一个设置为 Int64Index,将另一个设置为 RangeIndex。当我为两个数据帧放置以下代码(基于其他两列中的值创建一个新列)时,出现错误。我想使两个数据框的类型相同,以便我的代码可以为两个数据框工作以创建新列,稍后我将用于合并。

此代码适用于 Int64Index 但不适用于范围,并且我确认相关字段(列)在两个数据框中是相同的。

这对 Int64Index 数据帧 (df_new) 很有用:

# create new column by combining data in 3 other columns
df_new['ExpWLTh']=df_new['ExpNum'].astype(str)+'-'+df_new['WL'].astype(str)+'-'+df_new['Threshold'].astype(str)
Run Code Online (Sandbox Code Playgroud)

相同的代码在 RangeIndex 数据框 (df_val) 中不起作用,即使相关列的数据类型相同:

# create new column, combine 3 columns to make new one - for graphing
df_val['ExpWLTh']=df_val['ExpNum'].astype(str)+'-'+df_val['WL'].astype(str)+'-'+df_val['Threshold'].astype(str)
Run Code Online (Sandbox Code Playgroud)

当我尝试创建新列时,RangeIndex 数据框 (df_val) 给了我这个错误:

unorderable types: str() < int()
Run Code Online (Sandbox Code Playgroud)

以下是每个 df 中数据类型的详细信息:

df_val:
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 218 entries, 0 to 217
Data columns (total 15 columns):
Person               218 …
Run Code Online (Sandbox Code Playgroud)

python indexing pandas

11
推荐指数
1
解决办法
7256
查看次数

python - 具有 RangeIndex 与 Int64Index 的数据帧 - 为什么?

编辑:我刚刚在代码中发现一行将我的 df 从 RangeIndex 更改为数字 Int64Index。这是如何以及为何发生的?

在此行之前,我的所有 df 都是 RangeIndex 类型。在这行代码之后 df_new 更改为 Int64Index 类型,它是范围索引而不是数字索引。

# remove rows with DMT, no lumninance data
df_new = df_new[df_new.Person != 'DMT']
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释以下内容吗?

Int64Index 和 RangeIndex

"警告 0.18.0 中澄清了基于整数的浮点数索引的索引,有关更改的摘要,请参阅此处。Int64Index 是 pandas 中的基本索引。这是一个实现有序、可切片集的不可变数组。在0.18.0之前,Int64Index将为所有NDFrame对象提供默认索引。RangeIndex是0.18.0版本中添加的Int64Index的子类,现在为所有NDFrame对象提供默认索引。RangeIndex是Int64Index的优化版本可以表示单调有序集。这些类似于 Python 范围类型。 ” [来自https://pandas.pydata.org/pandas-docs/stable/advanced.html#int64index-and-rangeindex]

  1. 为什么索引类型从 RangeIndex 变为 Int64Index?
  2. 使用两种不同类型索引的数据帧之间的关键或重要区别是什么?(范围索引和 Int64 索引)

    类型(df_val.index)

    pandas.core.indexes.range.RangeIndex

    类型(df_new.index)

    pandas.core.indexes.numeric.Int64Index

python indexing

7
推荐指数
1
解决办法
3091
查看次数

使用 groupby 创建新的数据框

我读了这个(如何从熊猫 groupby 对象创建多个数据帧)但是,在我用 groupby 创建我的 grouped_persons 组后,我仍然不明白如何为每个人创建我的数据帧。

如何从 Pandas groupby 对象创建多个数据帧

我应该在此代码中更改什么?我认为这是我的问题的一部分:'df_'+ name +'1'

grouped_persons = df.groupby('Person')
for name, group in grouped_persons
    'df_'+ name +'1' = df.loc[(df.Person == name) & (df.ExpNum == 1)]
Run Code Online (Sandbox Code Playgroud)

文件“”,第 2 行表示名称,分组在 grouped_persons 中 ^ SyntaxError:语法无效

python loops dataframe python-3.x pandas-groupby

5
推荐指数
1
解决办法
1万
查看次数