pandas赋值不成功

最近遇到个奇葩问题,从一个pandas dataframe中取值赋值给另外一个df列结果没有赋值成功,赋值都是空。代码如下:

def replace_yaml_extension(value):
                        if pd.notnull(value) and value != '' and value.endswith('.yml'):
                            return value.replace('.yml', '.yaml')
                        else:
                            return value

                    def apply_replace_yaml_extension(series):
                        return series.apply(replace_yaml_extension)

                    diff_df[f'diff_{v}'] = apply_replace_yaml_extension(result_outer[v])

v=key,diff_key列没取到值,result_outer中key列数据不为空,更改代码按行获取还是空值。因为result_outer这个dataframe是两个其他df合并的,然后看数据发现 result_outer 索引不连续,如:1、2、3、4、5、6、8、11、13、15、16、17,于是想着是不是因为索引不连续引起的。
如果你遇到了Pandas DataFrame中索引不连续的问题,并且这影响到了你的代码执行结果,那么确实可能是因为索引不连续导致的问题。在Pandas中,DataFrame的索引可以是连续的也可以是不连续的。当索引不连续时,某些操作可能会受到影响。

索引不连续的影响

  1. 数据对齐问题

    • 当DataFrame的索引不连续时,某些操作如合并、连接或应用函数时可能会遇到数据对齐问题。
  2. 索引不匹配

    • 在进行DataFrame的列操作时,如果DataFrame的索引不连续或不匹配,可能会导致某些行被忽略或结果不正确。
  3. 应用函数时的问题

    • 如果DataFrame的索引不连续,应用函数时可能会出现问题,特别是当函数依赖于索引时。

你的具体情况

对于我的问题,如果 result_outer 的索引不连续,那么在应用函数时可能会导致一些行未被正确处理。具体来说,如果 result_outer 的索引不连续,那么 apply_replace_yaml_extension 函数可能无法按预期处理每一行。

解决方案

  1. 确认DataFrame的索引

    • 确认 result_outer 的索引是连续的。
    • 可以使用 result_outer.index 查看索引情况。
  2. 重置索引

    • 如果索引不连续,可以使用 reset_index 方法重置索引,使索引连续。
    • 示例:
      result_outer = result_outer.reset_index(drop=True)
      
  3. 应用函数

    • 重置索引后,再次尝试应用函数。
    • 示例:
      diff_df['diff_key'] = apply_replace_yaml_extension(result_outer['key'])
      

示例代码

下面是一个完整的示例,展示了如何检查和重置索引:

import pandas as pd

# 示例数据
data = {
    'key': ['file1.yml', 'file2.yml', 'file3.yaml', ''],
    'other': [1, 2, 3, 4]
}

result_outer = pd.DataFrame(data)

# 检查索引是否连续
print("Original index:", result_outer.index)

# 重置索引
result_outer = result_outer.reset_index(drop=True)

# 再次检查索引
print("Reset index:", result_outer.index)

def replace_yaml_extension(value):
    if pd.notnull(value) and value != '' and value.endswith('.yml'):
        return value.replace('.yml', '.yaml')
    else:
        return value

def apply_replace_yaml_extension(series):
    return series.apply(replace_yaml_extension)

# 初始化 diff_df
diff_df = pd.DataFrame()

# 处理 'key' 列
diff_df['diff_key'] = apply_replace_yaml_extension(result_outer['key'])

# 输出结果
print(diff_df)

这段代码将重置 result_outer 的索引,并处理 'key' 列。如果你的代码与这段示例相似,但仍然出现问题,请检查 result_outer 的索引是否正确重置,并确保 diff_df 正确初始化。
最终重置索引后发现能够正常赋值了!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识的宝藏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值