识别dataframe中的字符串并使用Python替换内容

识别dataframe中的字符串并使用Python替换内容,python,pandas,dataframe,replace,identity,Python,Pandas,Dataframe,Replace,Identity,我有一个csv文件,我用熊猫加载。首先,我决定重命名这些列。数据帧如下所示: 我的目标是检查每行的所有列是否包含以下字符\n。如果是这样,则必须修改包含前面提到的字符串的行的单元格,以便只剩下\n之后的内容。该算法的输出应如下所示: 到目前为止,代码是这样的,但我一直在查找和删除\n以及之前的内容 import pandas as pd df = pd.read_csv('prova.csv', sep=',', skiprows=0, header=None,low_memory=Fals

我有一个csv文件,我用熊猫加载。首先,我决定重命名这些列。数据帧如下所示:

我的目标是检查每行的所有列是否包含以下字符
\n
。如果是这样,则必须修改包含前面提到的字符串的行的单元格,以便只剩下
\n
之后的内容。该算法的输出应如下所示:

到目前为止,代码是这样的,但我一直在查找和删除\n以及之前的内容

import pandas as pd
df = pd.read_csv('prova.csv', sep=',', skiprows=0, header=None,low_memory=False)
df.columns = ['A','B','C','D','E','F']
for index, row in df.iterrows():
    if '\n' in row[?]:
        # how do I remove the unwanted characters for each cell?
注意:我想调查所有列,而不仅仅是那些出现
\n
的列

A    object
B    object
C    object
D    object
E     int64
F    object
dtype: object

IIUC,您可以使用
applymap
str.split
\n
字符上进行拆分,并进行最后一次拆分:

df['E'] = df['E'].astype(str)
df.applymap(lambda x: x.split('\n')[-1])

一艘班轮:

df.applymap(lambda x: x.split('\n')[-1] if type(x)==str else x)

IIUC,您可以使用
applymap
str.split
\n
字符上进行拆分,并进行最后一次拆分:

df['E'] = df['E'].astype(str)
df.applymap(lambda x: x.split('\n')[-1])

一艘班轮:

df.applymap(lambda x: x.split('\n')[-1] if type(x)==str else x)

可以使用正则表达式从字符串中删除“\n”(或指定的任何其他字符)之前的任何内容:

import re
str="onetwo\nthree"
print(str)
test = re.search('(?<=\\n)\w+', str)
print(test.group(0))
重新导入
str=“onetwo\nthree”
打印(str)

test=re.search(“(?您可以使用正则表达式从字符串中删除“\n”(或您指定的任何其他字符)之前的任何内容:

import re
str="onetwo\nthree"
print(str)
test = re.search('(?<=\\n)\w+', str)
print(test.group(0))
重新导入
str=“onetwo\nthree”
打印(str)
测试=重新搜索('(?解决方案
使用
str
存取器,在
stack
之后使用
split
,以获取序列

df.astype(str).stack().str.split('\n').str[-1].unstack()


设置参考 解决方案
使用
str
存取器,在
stack
之后使用
split
,以获取序列

df.astype(str).stack().str.split('\n').str[-1].unstack()


设置参考
请不要发布图像以共享数据。请粘贴数据并将其格式化为代码。为什么所有这些否决票…我的问题非常合法请不要发布图像以共享数据。请粘贴数据并将其格式化为代码。为什么所有这些否决票…我的问题非常合法!当我尝试您的解决方案时,出现以下错误:(“'numpy.int64'对象没有属性'split'”,'发生在索引E')怎么可能?您需要将所有列作为
string
对象才能工作。请检查
dtypes
,并使用
astype(str
)将这些整数列转换为
str
)。我按照您提到的方式进行了转换,不再收到任何错误消息,但什么也没有发生……数据帧保持原样……怎么可能?在Python
3.5
,Pandas
0.18.1
中对我来说运行良好。我有:Python 3.5.1(v3.5.1:37a07cee5969,2015年12月6日,01:54:25)[MSC v.1900 64位(AMD64)-Pandas'0.18.0'Hi!当我尝试您的解决方案时,我得到了以下错误:(“'numpy.int64'对象没有属性'split',发生在索引E')这怎么可能?您需要将所有列作为
string
对象才能工作。检查
dtypes
并使用
astype将这些整数列转换为
str
(str
)。我按照您提到的方式进行了转换,不再收到任何错误消息,但什么也没有发生……数据帧一直保持原样……怎么可能?在Python
3.5
、Pandas
0.18.1
中,它对我来说工作得很好。我有:Python 3.5.1(v3.5.1:37a07cee5969,2015年12月6日,01:54:25)[MSC v.1900 64位(AMD64)]-Pandas'0.18.0'