如何将列表元素附加到 pandas 系列中的每一行?
How to append a list element to each row in a pandas Series?
我有以下 pandas 系列,其中每一行都是一个没有空格的长字符串。它的形状是(250,)
(即有250行)
import pandas as pd
sr1 = pd.Series(...)
0
0 abdcadbcadcbadacbadbdddddacbadcbadadbcadbcadad...
1 cacacdacadbdcadcabdcbadcbadbdabcabdbbbbbacdbac...
2 bbbbbcadcacddabcadbcdabcbaddcbadcbadbcadbcaaba...
3 acdbcdacdbadbadcbdbaaaacbdacadbacaddcabdacbdab...
....
我有一个包含 250 个字符串的列表,我想将其附加到每一行的开头。
list_of_strings = ["prefix1", "prefix2", "prefix3", ...., "prefix250"]
如何将 list_of_strings
中的每个元素附加到 sr1
中的相应行?生成的系列应如下所示:
0
0 prefix1 abdcadbcadcbadacbadbdddddacbadcbadadbcadbcadad...
1 prefix2 cacacdacadbdcadcabdcbadcbadbdabcabdbbbbbacdbac...
2 prefix3 bbbbbcadcacddabcadbcdabcbaddcbadcbadbcadbcaaba...
3 prefix4 acdbcdacdbadbadcbdbaaaacbdacadbacaddcabdacbdab...
....
我的第一个想法是尝试这样的事情:
sr1.insert(0, "prefixes", value = list_of_strings)
但这会引发错误 AttributeError: 'Series' object has no attribute 'insert'
。可以将 sr1
转换为具有 sr1 = sr1.to_frame()
的 pandas DataFrame,而先前的 .insert()
将生成具有两列的 DataFrame。
在python中,我们可以用指定的分隔符连接字符串,如下所示:
first = "firstword"
second = "secondword"
combined = " ".join([first, second])
## outputs 'firstword secondword'
我不确定 pandas 系列的效果如何。也许 .apply(' '.join)
不知何故?
您需要先从 list
创建 Series
,然后添加双 add
或 +
- 一个用于空格,另一个用于 s
:
s = pd.Series(['a','b','c'])
list_of_strings = ["prefix1", "prefix2", "prefix3"]
print (pd.Series(list_of_strings, index=s.index).add(' ').add(s))
#same as
#print (pd.Series(list_of_strings, index=s.index)+ ' ' + s)
0 prefix1 a
1 prefix2 b
2 prefix3 c
dtype: object
cat
的另一个解决方案:
print (pd.Series(list_of_strings, index=s.index).str.cat(s, sep=' '))
0 prefix1 a
1 prefix2 b
2 prefix3 c
dtype: object
apply
, but need DataFrame
- by constructor or by concat
的解决方案:
print (pd.DataFrame({'prefix':list_of_strings, 'vals':s}).apply(' '.join, axis=1))
0 prefix1 a
1 prefix2 b
2 prefix3 c
dtype: object
print (pd.concat([pd.Series(list_of_strings, index=s.index), s], axis=1)
.apply(' '.join, axis=1))
0 prefix1 a
1 prefix2 b
2 prefix3 c
dtype: object
使用+运算符,它会自动连接字符串。
pd.Series(list_of_strings) + " " + sr1
您可以制作一系列前缀,然后将这两个系列加在一起:
import pandas as pd
s1 = pd.Series(['a'*10,'b'*10,'c'*10])
s1
# returns:
# 0 aaaaaaaaaa
# 1 bbbbbbbbbb
# 2 cccccccccc
s2 = pd.Series(['pre1', 'pre2', 'pre3'])
s2+s1
# returns:
# 0 pre1aaaaaaaaaa
# 1 pre2bbbbbbbbbb
# 2 pre3cccccccccc
将前缀列表变成一系列长度为 250 的序列,然后添加它们。
sr0 = pd.Series(list_of_strings)
sr1 = sr0 + sr1
我有以下 pandas 系列,其中每一行都是一个没有空格的长字符串。它的形状是(250,)
(即有250行)
import pandas as pd
sr1 = pd.Series(...)
0
0 abdcadbcadcbadacbadbdddddacbadcbadadbcadbcadad...
1 cacacdacadbdcadcabdcbadcbadbdabcabdbbbbbacdbac...
2 bbbbbcadcacddabcadbcdabcbaddcbadcbadbcadbcaaba...
3 acdbcdacdbadbadcbdbaaaacbdacadbacaddcabdacbdab...
....
我有一个包含 250 个字符串的列表,我想将其附加到每一行的开头。
list_of_strings = ["prefix1", "prefix2", "prefix3", ...., "prefix250"]
如何将 list_of_strings
中的每个元素附加到 sr1
中的相应行?生成的系列应如下所示:
0
0 prefix1 abdcadbcadcbadacbadbdddddacbadcbadadbcadbcadad...
1 prefix2 cacacdacadbdcadcabdcbadcbadbdabcabdbbbbbacdbac...
2 prefix3 bbbbbcadcacddabcadbcdabcbaddcbadcbadbcadbcaaba...
3 prefix4 acdbcdacdbadbadcbdbaaaacbdacadbacaddcabdacbdab...
....
我的第一个想法是尝试这样的事情:
sr1.insert(0, "prefixes", value = list_of_strings)
但这会引发错误 AttributeError: 'Series' object has no attribute 'insert'
。可以将 sr1
转换为具有 sr1 = sr1.to_frame()
的 pandas DataFrame,而先前的 .insert()
将生成具有两列的 DataFrame。
在python中,我们可以用指定的分隔符连接字符串,如下所示:
first = "firstword"
second = "secondword"
combined = " ".join([first, second])
## outputs 'firstword secondword'
我不确定 pandas 系列的效果如何。也许 .apply(' '.join)
不知何故?
您需要先从 list
创建 Series
,然后添加双 add
或 +
- 一个用于空格,另一个用于 s
:
s = pd.Series(['a','b','c'])
list_of_strings = ["prefix1", "prefix2", "prefix3"]
print (pd.Series(list_of_strings, index=s.index).add(' ').add(s))
#same as
#print (pd.Series(list_of_strings, index=s.index)+ ' ' + s)
0 prefix1 a
1 prefix2 b
2 prefix3 c
dtype: object
cat
的另一个解决方案:
print (pd.Series(list_of_strings, index=s.index).str.cat(s, sep=' '))
0 prefix1 a
1 prefix2 b
2 prefix3 c
dtype: object
apply
, but need DataFrame
- by constructor or by concat
的解决方案:
print (pd.DataFrame({'prefix':list_of_strings, 'vals':s}).apply(' '.join, axis=1))
0 prefix1 a
1 prefix2 b
2 prefix3 c
dtype: object
print (pd.concat([pd.Series(list_of_strings, index=s.index), s], axis=1)
.apply(' '.join, axis=1))
0 prefix1 a
1 prefix2 b
2 prefix3 c
dtype: object
使用+运算符,它会自动连接字符串。
pd.Series(list_of_strings) + " " + sr1
您可以制作一系列前缀,然后将这两个系列加在一起:
import pandas as pd
s1 = pd.Series(['a'*10,'b'*10,'c'*10])
s1
# returns:
# 0 aaaaaaaaaa
# 1 bbbbbbbbbb
# 2 cccccccccc
s2 = pd.Series(['pre1', 'pre2', 'pre3'])
s2+s1
# returns:
# 0 pre1aaaaaaaaaa
# 1 pre2bbbbbbbbbb
# 2 pre3cccccccccc
将前缀列表变成一系列长度为 250 的序列,然后添加它们。
sr0 = pd.Series(list_of_strings)
sr1 = sr0 + sr1