gpt4 book ai didi

python-3.x - 每 n 个字符拆分一个 pandas 列

转载 作者:行者123 更新时间:2023-12-04 15:01:40 26 4
gpt4 key购买 nike

我有一个数据框,其中一些列包含长字符串(例如 30000 个字符)。我想每 4000 个字符拆分这些列,这样我最终会得到一系列包含长度最多为 4000 的字符串的新列。我对字符串长度有一个上限,所以我知道最多应该有 9 个新列。我希望总是有 9 个新列,在字符串较短的列中有 None/NaN。

举个例子(n = 10 而不是 4000 和 3 列而不是 9),假设我有数据框:

df_test = pd.DataFrame({'id': [1, 2, 3],
'str_1': ['This is a long string', 'This is an even longer string', 'This is the longest string of them all'],
'str_2': ['This is also a long string', 'a short string', 'mini_str']})

id str_1 str_2
0 1 This is a long string This is also a long string
1 2 This is an even longer string a short string
2 3 This is the longest string of them all mini_str

在这种情况下我想得到结果

    id  str_1_1     str_1_2     str_1_3     str_1_4   str_2_1     str_2_2     str_2_3
0 1 This is a long strin g NaN This is al so a long string
1 2 This is an even long er string NaN a short st ring NaN
2 3 This is th e longest string of them all mini_str NaN NaN

在这里,我想要例如第一行,列 str_1_3 为长度为 1 的字符串。

我试过用

df_test['str_1'].str.split(r".{10}", expand=True, n=10)

但这没有用。结果是这样

    0   1   2           3
0 g None
1 er string None
2 them all

第一列未填写。

我还尝试遍历每一行并插入“|”每 10 个字符,然后拆分为“|”但这看起来既乏味又缓慢。

感谢任何帮助。

最佳答案

答案很简单,就是插入一个分隔符,然后拆分。

例如,使用|作为分隔符,令n = 4:

series = pd.Series(['This is an even longer string', 'This is the longest string of them all'],name='str1')
name = series.name
cols = series.str.replace('(.{10})', r'\1|').str.split('|', n=4, expand=True).add_prefix(f'{name}_')

即使用str.replace添加分隔符,使用str.split拆分,使用add_prefix添加前缀.

输出将是:

    str1_0      str1_1      str1_2      str1_3
0 This is an even long er string None
1 This is th e longest string of them all

str.split('.{10}') 不起作用的原因是 str.split< 函数中的 pat 参数 是一种模式,用于将字符串匹配为 split delimiters 但不匹配应在拆分结果中的字符串。因此,使用 str.split('.{10}'),每 10 个字符得到一个字符。

更新:根据@AKX 的建议,使用\x1F 作为更好的分隔符:

cols = series.str.replace('(.{10})', '\\1\x1F').str.split('\x1F', n=4, expand=True).add_prefix(f'{name}_')

请注意缺少 r 字符串标志。

关于python-3.x - 每 n 个字符拆分一个 pandas 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66853859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com