列列表成字符串

时间:2019-05-21 14:38:27

标签: python pandas dataframe

我有一个看起来像这样的数据集:


id  keyPhrases
0   [word1, word2]
1   [word4, word 5 and 6, word7]
2   [word8, etc, etc

“ keyPhrases”中的每个值都是一个列表。 我想将每个列表扩展到新行(字符串)

“ id”列现在并不重要。

已经尝试过df.values,from_records等

预期:


keyPhrases
word1
word2
word3
word4

8 个答案:

答案 0 :(得分:2)

您可以结合使用itertools.chain和数据框列选择:

import itertools

df = pd.DataFrame({
    'keyPhrases': [
        ['word1', 'word2'],
        ['word4', 'word5', 'word7'],
        ['word8', 'word9']
    ],
    'id': [1,2,3]
})

for elem in itertools.chain.from_iterable(df['keyPhrases'].values):
    print(elem)

将打印:

word1
word2
word4
word5
word7
word8
word9

答案 1 :(得分:2)

np.concatenate()

np.concatenate(df.keyPhrases) #data courtesy vurmux

array(['word1', 'word2', 'word4', 'word5', 'word7', 'word8', 'word9'],
  dtype='<U5')

另一种方式:

import functools
import operator
functools.reduce(operator.iadd, df.keyPhrases, [])
#['word1', 'word2', 'word4', 'word5', 'word7', 'word8', 'word9']

答案 2 :(得分:2)

一种有趣的方式,但不推荐

df.keyPhrases.sum()
Out[520]: ['word1', 'word2', 'word4', 'word5', 'word7', 'word8', 'word9']

答案 3 :(得分:1)

// Doesn't have to be an anonymous class
Task<String> task = new Task<>() {

    @Override 
    protected String call() {
        System.out.println("test");
        return "test2";
    }

});
task.runningProperty().addListener((obs, wasRunning, isRunning) -> {
    if (isRunning) {
        showSpinner();
    } else {
        hideSpinner();
    }
});
task.setOnSucceeded(event -> {
    String a = task.getValue();
    // Do something with value.
});

executorService.execute(task);

答案 4 :(得分:1)

上面给出的有关numpy库的答案确实非常好,但是我通过放置一个网格而不是性能代码,而是以最简单的方式来理解它。

import pandas as pd

lista = [[['word1', 'word2']], [['word4', 'word5', 'word6', 'word7']], [['word8', 'word9', 'word10']]]
df = pd.DataFrame(lista, columns=['keyPhrases'])

list = []
for key in df.keyPhrases:
    for element in key:
        list.append(element)
list

答案 5 :(得分:1)

numpy和itertools方法都可以正常工作。

我最终使用了itertools方法,并使用来将每一行写入文件。

它为我节省了很多时间和代码。

非常感谢!


for elem in itertools.chain.from_iterable(df['keyPhrases'].values):
    textfile.write(elem + "\n")

答案 6 :(得分:1)

找到另一种方法:

df['keyPhrases'] = df['keyPhrases'].str.split(',') #to make arrays
df['keyPhrases'] = df['keyPhrases'].astype(str) #back to strings
s=''.join(df.keyPhrases).replace('[','').replace(']','\n').replace(',','\n') #replace magic
print(s)

word1
 word2
word4
 word 5 and 6
 word7
word8
 etc
 etc

答案 7 :(得分:1)

我不确定任何现有功能都可以在单行代码中完成。下面的代码变通可以解决您的需求。如果还有其他内置函数可以轻松完成此任务,我将很高兴知道。

<Route
  exact
  path="/something/:id"
  render={(props)=> (
    <ProfileUser
      key={props.match.params.id}
      id={props.match.params.id}
      {...props}
    />
  )}
/>

This link可以帮助您满足要求。