Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带字列的数据帧字符串数组_Python_String_Pandas_Dataframe - Fatal编程技术网

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如果此解决方案有帮助,请接受它(在旁边打勾)以确认解决方案。