Python 3.x 替换熊猫系列上的模式,其中每行包含字符串列表

Python 3.x 替换熊猫系列上的模式,其中每行包含字符串列表,python-3.x,pandas,Python 3.x,Pandas,我想替换pandas系列中的一个模式,其中每行包含一个字符串列表。其思想是在列表中属于一行的每个字符串中搜索模式。数据集有几行,这些特定的列由字符串列表组成 input = {'1': [['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd']]} df = pd.DataFrame(input) print(df) 现在,我想在每行的

我想替换pandas系列中的一个模式,其中每行包含一个字符串列表。其思想是在列表中属于一行的每个字符串中搜索模式。数据集有几行,这些特定的列由字符串列表组成

input = {'1': [['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd']]}
df = pd.DataFrame(input)
print(df)
现在,我想在每行的每个字符串列表中将所有的“a”替换为“e”。

这里有一种方法

In [118]: df['1'].apply(lambda x: ['e' if v=='a' else v for v in x])
Out[118]:
0    [e, b, c, d]
1    [e, b, c, d]
2    [e, b, c, d]
3    [e, b, c, d]
4    [e, b, c, d]
Name: 1, dtype: object
另一种方式

In [119]: df['1'].apply(lambda x: map(lambda v: 'e' if v=='a' else v, x))
Out[119]:
0    [e, b, c, d]
1    [e, b, c, d]
2    [e, b, c, d]
3    [e, b, c, d]
4    [e, b, c, d]
Name: 1, dtype: object
或者,在所有列上使用df.applymaplambdafunc

细节

In [120]: df
Out[120]:
              1
0  [a, b, c, d]
1  [a, b, c, d]
2  [a, b, c, d]
3  [a, b, c, d]
4  [a, b, c, d]
这里有一条路

In [118]: df['1'].apply(lambda x: ['e' if v=='a' else v for v in x])
Out[118]:
0    [e, b, c, d]
1    [e, b, c, d]
2    [e, b, c, d]
3    [e, b, c, d]
4    [e, b, c, d]
Name: 1, dtype: object
另一种方式

In [119]: df['1'].apply(lambda x: map(lambda v: 'e' if v=='a' else v, x))
Out[119]:
0    [e, b, c, d]
1    [e, b, c, d]
2    [e, b, c, d]
3    [e, b, c, d]
4    [e, b, c, d]
Name: 1, dtype: object
或者,在所有列上使用df.applymaplambdafunc

细节

In [120]: df
Out[120]:
              1
0  [a, b, c, d]
1  [a, b, c, d]
2  [a, b, c, d]
3  [a, b, c, d]
4  [a, b, c, d]

上述答案有效,但这一个也有效:

input = {'1': [['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd']]}
df = pd.DataFrame(input)
df = df['1'].apply(lambda x: [v.replace("a", "e") for v in x])
print(df)
输出:

0    [e, b, c, d]
1    [e, b, c, d]
2    [e, b, c, d]
3    [e, b, c, d]
4    [e, b, c, d]

上述答案有效,但这一个也有效:

input = {'1': [['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd']]}
df = pd.DataFrame(input)
df = df['1'].apply(lambda x: [v.replace("a", "e") for v in x])
print(df)
输出:

0    [e, b, c, d]
1    [e, b, c, d]
2    [e, b, c, d]
3    [e, b, c, d]
4    [e, b, c, d]

这里有一个使用默认值的有趣方法。也使用理解

df['1'] = [[{'a': 'e'}.get(x, x) for x in r] for r in df['1'].values.tolist()]
df

              1
0  [e, b, c, d]
1  [e, b, c, d]
2  [e, b, c, d]
3  [e, b, c, d]
4  [e, b, c, d]

这里有一个使用默认值的有趣方法。也使用理解

df['1'] = [[{'a': 'e'}.get(x, x) for x in r] for r in df['1'].values.tolist()]
df

              1
0  [e, b, c, d]
1  [e, b, c, d]
2  [e, b, c, d]
3  [e, b, c, d]
4  [e, b, c, d]
让我们重建数据帧

让我们重建数据帧


您好零,非常感谢,您的建议对我帮助很大!:我还尝试了压缩中的压缩+1你的意思是像[e'如果v='a'else v代表x中的v]代表df中的x['1']]一样[func_部分]代表df中的x['1']]?是的。这就是我的意思-:你好零,非常感谢你,你的建议帮助了我很多!:我还尝试了压缩中的压缩+1你的意思是像[e'如果v='a'else v代表x中的v]代表df中的x['1']]一样[func_部分]代表df中的x['1']]?是的。这就是我的意思-:我也喜欢这个-:谢谢-~~@我也喜欢这个-:谢谢-~~@皮尔斯平方