Python 如何在pandas中拆分str.split()列的输出?
事情是这样的,我有这样的数据集(我们称之为df): 正如你所看到的,这是一个包含调查的表格,我试图只从列文本中得到答案。我的第一个想法是尝试拆分文本,就像这样:Python 如何在pandas中拆分str.split()列的输出?,python,pandas,string,split,Python,Pandas,String,Split,事情是这样的,我有这样的数据集(我们称之为df): 正如你所看到的,这是一个包含调查的表格,我试图只从列文本中得到答案。我的第一个想法是尝试拆分文本,就像这样: df['text_splitted'] = df.text.str.split('\n') df['final_text'] = df. text_splitted.str.split(':') 然后我会这样做: df['text_splitted'] = df.text.str.split('\n') df['final_tex
df['text_splitted'] = df.text.str.split('\n')
df['final_text'] = df. text_splitted.str.split(':')
然后我会这样做:
df['text_splitted'] = df.text.str.split('\n')
df['final_text'] = df. text_splitted.str.split(':')
但是,最终文本正在返回NaN。刚才发生了什么事?为什么新列返回null?有什么方法可以解决这个问题(或者有更好的方法来完成我在这里尝试的工作)?您可以使用.apply()和.split()的组合来获得答案
df = pd.DataFrame({'text': ['How was your experience?: Great\nWhat did you buy?: A book\n']})
输入测向
text
0 How was your experience?: Great\nWhat did you ..
分成问题和答案
df['questions'] = df['text'].apply(lambda x: [y.split(":")[0] for y in x.split("\n")])
df['answers'] = df['text'].apply(lambda x: [y.split(":")[1] for y in x.split("\n") if len(y)>1])
输出测向
answers questions
0 [ Great, A book] [How was your experience?, What did you buy?, ]
在编写时,需要将列
文本拆分两次。之后,您可以创建包含3列的数据框:
id
来自原始数据帧
问题
(偶数行)来自上一次拆分
回答上一次拆分中的
(奇数行)
text=df[“text”].str.strip().str.split(“\n”).explode().str.split(“:”.explode()
out=pd.merge(df[“id”],pd.DataFrame({“问题”:文本[0::2],“答案”:文本[1::2]}),
左索引=真,右索引=真)。重置索引(drop=真)
你觉得这种格式怎么样
>>输出
身份证问题答案
你的经历怎么样?伟大的
你买了什么?书
你的经历怎么样?好
你买了什么?笔
4 C2你的经历如何?可怕的
你买了什么?铅笔
您可以尝试以下方法:
df.set_index('id')['text'].str.replace(r'\\n$', '').str.split(r'\\n').explode().str.split(': ', expand=True)
0 1
id
A1 How was your experience? Great
A1 What did you buy? A book
B1 How was your experience? Good
B1 What did you buy? A pen
C2 How was your experience? Awful
C2 What did you buy? A pencil
这是因为df['text\u splited']
不是字符串,而是一个列表(split
)@correliane使用是正确的。列表上的str.split(':')
将导致null/NaN。然而,为了改进这个问题和未来的问题,您的数据应该是一段易于复制的代码,可以用来轻松地构建数据框架。看,还有。如果您包含了预期的输出,那么您不仅可能得到错误的地方,还可能得到一个有效的解决方案。不知道为什么答案返回“IndexError:list index out range”。有什么想法吗?