当前位置: 首页 > 知识库问答 >
问题:

熊猫-应用替换功能与条件行

万俟飞语
2023-03-14

从该数据帧开始df

     0     1     2
02  en    it  None
03  en  None  None
01  nl    en   fil

有一些缺失的值。我试图以行方式应用替换函数,例如在伪代码中:

def replace(x):
    if 'fil' and 'nl' in row:
        x = ''

我知道我可以做一些事情,比如:

df.apply(f, axis=1)

函数f定义如下:

def f(x):
    if x[0] == 'nl' and x[2] == 'fil':
        x[0] = ''
    return x

获得:

     0     1     2
02  en    it  None
03  en  None  None
01        en   fil

但是先验地,我不知道字符串在列中的实际位置,所以我必须使用类似于isin的方法进行搜索,但要按行搜索。

编辑:每个字符串都可以出现在列中的任何位置。

共有2个答案

赵永新
2023-03-14

您可以创建基于字符串比较的布尔索引

df['0'].str.contains('nl') & df['2'].str.contains('fil')

或者,由于您更新了,列可能会更改:

df.isin(['fil']).any(axis=1) & df.isin(['nl']).any(axis=1)

以下是测试用例:

import pandas as pd
from cStringIO import StringIO

text_file = '''
     0     1     2
02  en    it  None
03  en  None  None
01  nl    en   fil
'''

# Read in tabular data
df = pd.read_table(StringIO(text_file), sep='\s+')
print 'Original Data:'
print df
print

# Create boolean index based on text comparison
boolIndx = df.isin(['nl']).any(axis=1) & df.isin(['fil']).any(axis=1)
print 'Example Boolean index:'
print boolIndx
print

# Replace string based on boolean assignment   
df.loc[boolIndx] = df.loc[boolIndx].replace('nl', '')
print 'Filtered Data:'
print df
print
Original Data:
    0     1     2
2  en    it  None
3  en  None  None
1  nl    en   fil

Example Boolean index:
2    False
3    False
1     True
dtype: bool

Filtered Data:
    0     1     2
2  en    it  None
3  en  None  None
1        en   fil
阎嘉荣
2023-03-14

您可以这样做:

In [111]:
def func(x):
    return x.isin(['fil']).any() &  x.isin(['nl']).any()
df.loc[df.apply(func, axis=1)] = df.replace('nl','')
df

Out[111]:
    0     1     2
2  en    it  None
3  en  None  None
1        en   fil

因此,如果两个值都存在于行中的任何位置,则函数将返回True

In [107]:
df.apply(func, axis=1)

Out[107]:
2    False
3    False
1     True
dtype: bool
 类似资料:
  • 我有一个数据框架: 和一本参考词典: 我的目标是将所有出现的< code > replacement _ dict[' X1 ']替换为' X1 ',然后将这些行合并在一起。例如,“x1”、“x2”、“x3”或“x4”的任何实例都将被替换为“X1”等。 我可以通过选择包含任何这些字符串的行并将其替换为“X1”来实现这一点: 给予: 现在,如果我选择所有包含“X1”的行并将它们合并,我将得到: 因此

  • 问题内容: 我知道这个问题有很多主题,但是没有一种方法适合我,因此我将发布有关我的具体情况的信息 我有一个看起来像这样的数据框: 我想做的是将“性别”列中的全0替换为“女”,并将所有1替换为“男”,但是当我使用上面的代码时,数据框中的值似乎没有变化 我是否使用了replace()错误?还是有更好的方法进行条件值替换? 问题答案: 是的,您使用的是错误的,默认情况下不是就地操作,它会返回替换的数据框

  • 问题内容: 鉴于熊猫0.20.0的更新和弃用,我想知道用其余的和获得相同结果的最有效方法是什么。我只是回答了这个问题,但是第二种选择(不使用)似乎效率低下且冗长。 片段: 同时使用条件和索引位置过滤时,这是正确的方法吗? 问题答案: 通过用位置对特定索引进行切片来获得所需的索引值,您可以留在一个单一的世界中。

  • 问题内容: 给定以下数组,我想用点替换逗号: 我一直在尝试不同的方式,但是我不知道该怎么做。另外,我已将其作为DataFrame导入,但无法应用该函数: 有什么建议如何解决这个问题? 问题答案: 您需要分配的结果,你的工作早在操作不就地,除了可以使用或并用矢量化要做到这一点更快: 这里的关键是分配结果:

  • 我有一个数据帧(df),看起来像这样: 现在,我的目标是,对于列中的每个,应将列中关联的-值替换为字符串。 到目前为止我做了什么 我偶然发现了,它替换了每个(这不是我要找的),缺少值和,这似乎是我想要的,但不起作用。此外,我尝试了这个: 缺少索引或某种迭代器来访问列中的等效值 我试过这个: 这显然不起作用。 我看了几个问题,但不能基于答案中的建议。布莱克的问题西蒙的问题szli的问题扬·威廉斯·图

  • 我试图开发以下过滤器与熊猫数据帧: 我有四列,,,和 如何将其作为聚合函数编写? 下面是一个编写效率低下的工作示例: 输出: