python - 在自定义分隔符上拆分字符串列替换相邻的 NaN

标签 python pandas dataframe nan

我想对 * 上的字符串进行分区,然后使用 * 的右侧更新第二列。

import pandas as pd
import numpy as np

df = pd.DataFrame.from_dict({
    '0': {'158': 'QRE', '159': 'AAA*XCN', '160': 'JJJJ'},
    '1': {'158': 'ABC', '159': np.nan, '160': np.nan},
    '2': {'158': 931, '159': 88, '160': 0},
})


# :            0    1    2
# : 158      QRE  ABC  931
# : 159  AAA*XCN  NaN   88
# : 160     JJJJ  NaN    0

expected = pd.DataFrame.from_dict({
    '0': {'158': 'QRE', '159': 'AAA', '160': 'JJJJ'},
    '1': {'158': 'ABC', '159': '*XCN', '160': np.nan},
    '2': {'158': 931, '159': 88, '160': 0},
})


# :         0     1    2
# : 158   QRE   ABC  931
# : 159   AAA  *XCN   88
# : 160  JJJJ   NaN    0

这是我目前所拥有的,但我正在努力走到尽头。

split = df.iloc[:, 0].str.partition('*', expand=True)
df.iloc[:, 0] = split.iloc[:, 0]
rows = df.iloc[:, 1].isnull()

最佳答案

使用update通过 split ed DataFrame,如有必要,还可以通过 radd 添加 * :

split = df.iloc[:, 0].str.split('*', expand=True).rename(columns=str)
split['1'] = split['1'].radd('*')
#same like
#split['1'] = '*' + split['1']
df.update(split)
print (df)
        0     1    2
158   QRE   ABC  931
159   AAA  *XCN   88
160  JJJJ   NaN    0

关于python - 在自定义分隔符上拆分字符串列替换相邻的 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49775998/

相关文章:

python - 使用 pandas/matplotlib 或 seaborn 排序的条形图

python - 使用 pandas 数据帧不等式保持 NaN

python - Pandas 中的浮点索引的目的是什么?

arrays - 如何访问数据框列中的数组元素(标量)

python - 在 pandas DataFrame 中计算每列行中的重复项

python - 切换到 selenium webdriver 中的 web 对话框 : Python

python - 在 Python 3 中对 csv 文件使用正确的编码

python - Numpy ndenumerate 非常慢。有没有更快的方法在 numpy 的数组上使用条件?

python - Pandas:强制将 Excel 文件中的多行合并为单行合并为单行

python - 根据索引列表更改 Pandas 列的值