weixin_46530456 2024-03-24 16:49 采纳率: 0%
浏览 4

pandas dataframe 数据格式转化 基础

我有一个 dataframe 在 Pandas 中,其最后三列名字为 'Replicate a','Replicate b','Replicate c'。我想将这三列转化为 floa32格式,并使用如下代码:

df_deal.iloc[:,-3:] = df_deal.iloc[:,-3:].apply(pd.to_numeric, errors='coerce').astype('float32') # 这里用位置索引,索引最后三列

但是这个代码跑完以后,数据格式并有变化依然是object

print(df_deal.iloc[:,-1].dtypes)
print(df_deal.iloc[:,-2].dtypes)
print(df_deal.iloc[:,-3].dtypes)

结果全是object
有人说,多列索引的时候得到的是副本,于是我使用循环一列一列修改:

for i in range(-3,0):
    df_deal.iloc[:,i] = df_deal.iloc[:,i].apply(pd.to_numeric, errors='coerce').astype('float32')

但结果依然是 object

数据后三列见图:

img

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-24 16:50
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 首先,使用 df.iloc[:, -3:] 进行索引,会得到一个包含最后三列的子 DataFrame。这个子 DataFrame 应该是原 DataFrame 的一个视图,而不是副本(Pandas 中有两种索引方式:标签索引和位置索引。使用位置索引时,如果传入的是一个列表或切片,生成的子 DataFrame 是原 DataFrame 的视图。使用标签索引时,生成的子 DataFrame 是原 DataFrame 的副本)。 但这并不影响对子 DataFrame 进行操作,因为 Pandas 的操作都是基于数据的复制,这会自动处理数据的副本和视图的问题。 其次,循环修改每一列时,使用了 df.iloc[:, i],这里的 i 是一个整数,表示倒数第几列,但是在 Python 中,索引是从 0 开始的。因此,在这个循环中,i 的范围应该是 -3 到 -1。 最后,数据格式没有发生变化的原因,很可能是数据中包含了一些无法转换为 float32 格式的值,例如缺失值或非数字值。这些值将会被转换为 NaN。需要检查数据中是否存在这样的值。 解决方案: 可以尝试使用 Pandas 中的 pd.to_numeric() 函数,将数据转换为 float32 格式。该函数可以方便地将数据中的非数字值转换为 NaN。 代码示例:
    import pandas as pd
    # 读取数据
    df = pd.read_csv('data.csv')
    # 将最后三列转换为 float32
    df.iloc[:, -3:] = df.iloc[:, -3:].apply(pd.to_numeric, errors='coerce').astype('float32')
    # 检查数据类型
    print(df.iloc[:, -1].dtypes)
    print(df.iloc[:, -2].dtypes)
    print(df.iloc[:, -3].dtypes)
    
    评论

报告相同问题?

问题事件

  • 修改了问题 3月24日
  • 创建了问题 3月24日

悬赏问题

  • ¥20 找辅导 初学者 想实现一个项目 没有方向
  • ¥15 关于渗漏场的电场分布模拟
  • ¥24 matlab怎么修改仿真初始时间
  • ¥15 两分段线性回归模型分析阈值效应
  • ¥15 前端和后端代码都没报错,但是点登录没反应的?
  • ¥100 需要远程解决QSQLITE问题!
  • ¥15 利用光场表达式画出初始光场强度分布图像等几个问题在这两个图片里
  • ¥15 gozero求手把手教学,400一天
  • ¥15 泥浆冲清水的泥浆分布
  • ¥15 LASSO回归分析筛选关键基因,适合多大样本量?