Python 带字列的数据帧字符串数组
从如下字符串数组中获取最简单的方法是:Python 带字列的数据帧字符串数组,python,string,pandas,dataframe,Python,String,Pandas,Dataframe,从如下字符串数组中获取最简单的方法是: arr = ['abc def ghi', 'def jkl xyz', 'abc xyz', 'jkl xyz'] abc def ghi jkl xyz 0 1 1 1 0 0 1 0 1 0 1 1 2 1 0 0 0 1 3 0 0 0 1 1 到一个数据帧,其中每列是一个单词,每行包含0或1,具体取决于单词是否出现在字符串中。大概是这样的: arr
arr = ['abc def ghi', 'def jkl xyz', 'abc xyz', 'jkl xyz']
abc def ghi jkl xyz
0 1 1 1 0 0
1 0 1 0 1 1
2 1 0 0 0 1
3 0 0 0 1 1
到一个数据帧,其中每列是一个单词,每行包含0或1,具体取决于单词是否出现在字符串中。大概是这样的:
arr = ['abc def ghi', 'def jkl xyz', 'abc xyz', 'jkl xyz']
abc def ghi jkl xyz
0 1 1 1 0 0
1 0 1 0 1 1
2 1 0 0 0 1
3 0 0 0 1 1
编辑:这是我的方法,在我看来,这就像很多python循环,而不是使用内置函数
labels = (' ').join(arr)
labels = labels.split()
labels = list(set(labels))
labels = sorted(labels)
df = pd.DataFrame(np.zeros((len(arr), len(labels))), columns=labels)
cols = list(df.columns.values)
for i in range(len(arr)):
for col in cols:
if col in arr[i]:
df.set_value(i, col, 1)
已编辑-减少为3条基本行:
import pandas as pd
arr = ['abc def ghi', 'def jkl xyz', 'abc xyz', 'jkl xyz']
words = set( ' '.join( arr ).split() )
rows = [ { w : int( w in e ) for w in words } for e in arr ]
df = pd.DataFrame( rows )
print( df )
结果:
abc def ghi jkl xyz
0 1 1 1 0 0
1 0 1 0 1 1
2 1 0 0 0 1
3 0 0 0 1 1
已编辑-减少为3条基本行:
import pandas as pd
arr = ['abc def ghi', 'def jkl xyz', 'abc xyz', 'jkl xyz']
words = set( ' '.join( arr ).split() )
rows = [ { w : int( w in e ) for w in words } for e in arr ]
df = pd.DataFrame( rows )
print( df )
结果:
abc def ghi jkl xyz
0 1 1 1 0 0
1 0 1 0 1 1
2 1 0 0 0 1
3 0 0 0 1 1
很抱歉,这个网站不是为了解决你的任务,而是为了帮助你解决在解决问题的过程中遇到的问题。那么,到目前为止,您的代码是什么样子的呢?我在问题中包括了我自己的代码,它可以工作,但看起来像很多手动python循环。我想也许有一个更简单的方法可以用pandasI来做,对不起,但是这个网站不是为了解决你的任务,而是为了帮助你解决你在解决问题的过程中遇到的问题。那么,到目前为止,您的代码是什么样子的呢?我在问题中包括了我自己的代码,它可以工作,但看起来像很多手动python循环。我认为可能有一种更简单的方法来使用Pandastanks,很抱歉现在从一开始就包含了我的代码。你的比我的跑得快一点。通过直接在行列表理解的结果上创建DataFrame,您可以将其减少为2行,但这更具可读性:)@pietz如果此解决方案有帮助,请接受它(在旁边打勾)以确认解决方案。感谢并抱歉现在从一开始就包含我的代码。你的比我的跑得快一点。通过直接在行列表理解的结果上创建DataFrame,您可以将其减少为2行,但这更具可读性:)@pietz如果此解决方案有帮助,请接受它(在旁边打勾)以确认解决方案。