如何将 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) 编辑:我刚刚在代码中发现一行将我的 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]
使用两种不同类型索引的数据帧之间的关键或重要区别是什么?(范围索引和 Int64 索引)
类型(df_val.index)
pandas.core.indexes.range.RangeIndex
类型(df_new.index)
pandas.core.indexes.numeric.Int64Index
我读了这个(如何从熊猫 groupby 对象创建多个数据帧)但是,在我用 groupby 创建我的 grouped_persons 组后,我仍然不明白如何为每个人创建我的数据帧。
我应该在此代码中更改什么?我认为这是我的问题的一部分:'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:语法无效