Python pandas 方法链接 : assign column from strsplit

标签 python pandas assign method-chaining

当我想从另一列的拆分创建一个新列时,分配方法出现问题。如果我选择 split 方法的值,我将收到错误 ValueError: Length of values does not match length of index。如果我只是应用拆分,而不选择(索引)任何值,我会得到一个包含列表的新列。

如果我不索引拆分方法的输出,这里是输出

(
    pd.DataFrame({
        "Gene": ["G1", "G1", "G2", "G2"],
        "Sample": ["H1_T1", "H2_T1", "H1_T1", "H2_T1"]
    })
    .assign(Timepoint = lambda x: x.Sample.str.split("_")[1])
)
    Gene    Sample  Timepoint
0   G1  H1_T1   [H1, T1]
1   G1  H2_T1   [H2, T1]
2   G2  H1_T1   [H1, T1]
3   G2  H2_T1   [H2, T1]

这是一个示例,我想从 Sample 列中选择 T1 或 T2 值并给出错误:

(
    pd.DataFrame({
        "Gene": ["G1", "G1", "G2", "G2"],
        "Sample": ["H1_T1", "H2_T1", "H1_T1", "H2_T1"]
    })
    .assign(Timepoint = lambda x: x.Sample.str.split("_")[1])
)

我得到的错误是:

/home/user/anaconda3/lib/python3.4/site-packages/pandas/core/series.py in _sanitize_index(data, index, copy)
   2739 
   2740     if len(data) != len(index):
-> 2741         raise ValueError('Length of values does not match length of '
   2742                          'index')
   2743 

ValueError: Length of values does not match length of index

最佳答案

IIUC 那么您需要额外调用 str 来选择元素:

In [234]:
pd.DataFrame({
        "Gene": ["G1", "G1", "G2", "G2"],
        "Sample": ["H1_T1", "H2_T1", "H1_T1", "H2_T1"]
    }).assign(Timepoint = lambda x: x.Sample.str.split("_").str[1])

Out[234]:
  Gene Sample Timepoint
0   G1  H1_T1        T1
1   G1  H2_T1        T1
2   G2  H1_T1        T1
3   G2  H2_T1        T1

如果我们稍微修改你的 df 并查看输出

In [237]:
df = pd.DataFrame({
        "Gene": ["G1", "G1", "G2", "G2"],
        "Sample": ["H1_T1", "H2_T2", "H1_T3", "H2_T4"]
    })

df['Sample'].str.split("_")

Out[237]:
0    [H1, T1]
1    [H2, T2]
2    [H1, T3]
3    [H2, T4]
dtype: object

所以您尝试的是以下内容:

In [238]:
df['Sample'].str.split("_")[1]

Out[238]:
['H2', 'T2']

你可以看到这里所做的是选择第二行,你想要的是选择每一行的第二个元素:

In [239]:
df['Sample'].str.split("_").str[1]

Out[239]:
0    T1
1    T2
2    T3
3    T4
dtype: object

关于Python pandas 方法链接 : assign column from strsplit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35477765/

相关文章:

python - 在 Flask 中运行后台 Celery 任务

python - Groupby Sum 忽略几列

python - 计算某列在恢复为 0 之前为正值的时间量

python - PANDAS:传递的索引形状不正确,不确定如何修复

python - 使用Python在Windows中抓取和设置窗口大小

python - NumPy C API 扩展导致内存使用过多

python - 从 yaml 文件中删除空对象

java - 在java中一次进行多项分配

swift - Swift 中快捷可选绑定(bind)语法的等价性

ssh - 具有一个公共(public) IP 的 Docker 容器