假设我有一个数据框:
col1 col2 col3
0 1 5 2
1 7 13
2 9 1
3 7
Run Code Online (Sandbox Code Playgroud)
如何转换为单个列表,例如:
[1, 7, 9, 5, 13, 1, 7]
Run Code Online (Sandbox Code Playgroud)
我试过了:
df.values.tolist()
Run Code Online (Sandbox Code Playgroud)
但是,这将返回列表列表而不是单个列表:
[[1.0, 5.0, 2.0], [7.0, 13.0, nan], [9.0, 1.0, nan], [nan, 7.0, nan]]
Run Code Online (Sandbox Code Playgroud)
请注意,数据框将包含未知数量的列。只要列表包含数据框中的所有值,值的顺序并不重要。
我想我可以编写一个函数来解压这些值,但是我想知道是否有一种简单的内置方法可以将数据帧转换为系列/列表?
假设我有一个 DataFrame,例如:
col1 col2
0 1 A
1 2 B
2 6 A
3 5 C
4 9 C
5 3 A
6 5 B
Run Code Online (Sandbox Code Playgroud)
以及多个列表,例如:
list_1 = [1, 2, 4]
list_2 = [3, 8]
list_3 = [5, 6, 7, 9]
Run Code Online (Sandbox Code Playgroud)
我可以col2根据 的值col1是否包含在列表中来更新 的值,例如:
for i in list_1:
df.loc[df.col1 == i, 'col2'] = 'A'
for i in list_2:
df.loc[df.col1 == i, 'col2'] = 'B'
for i in list_3:
df.loc[df.col1 == i, 'col2'] = 'C'
Run Code Online (Sandbox Code Playgroud)
然而,这是非常缓慢的。对于 30,000 …
我需要将字符串拆分成包含x单词数量的列表,但要重复最后一个x-1单词。
line = "Lorem ipsum dolor sit amet consectetur."
Run Code Online (Sandbox Code Playgroud)
如果为x = 2,则输出应为:
['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet', 'amet consectetur']
Run Code Online (Sandbox Code Playgroud)
如果为x = 3,则输出应为:
['Lorem ipsum dolor', 'ipsum dolor sit', 'dolor sit amet', 'sit amet consectetur']
Run Code Online (Sandbox Code Playgroud)
根据将字符串拆分为两个单词的列表,重复最后一个单词,以下代码成功将字符串拆分为2个单词对:
words = line.split()
print(list(map(' '.join, zip(words[:-1], words[1:]))))
Run Code Online (Sandbox Code Playgroud)
但是,不是将单词的数量硬编码为2,我想指定单词的数量x,例如:
number_of_words = x
def generate_list(x):
Run Code Online (Sandbox Code Playgroud)
我试过了中的整数print(list(map(' '.join, zip(words[:-1], words[1:])))),但是整数似乎只影响单词的顺序,而不影响单词的数量。
我想我可以编写单独的函数来处理2个单词,3个单词,4个单词的场景,但是理想情况下,我希望有一个函数可以处理任意x数量的单词。