gpt4 book ai didi

python - 将 pandas 系列拆分为多列

转载 作者:行者123 更新时间:2023-11-30 22:56:23 25 4
gpt4 key购买 nike

我正在从数据库中提取大量条目(> 1500 万条条目),目的是导出到 CSV 文件。我在请求结束时得到的是一个包含超过 1500 万行的单列数据框。我正在寻找一个函数,可以将每百万个条目拆分为多个列。

因此,对于包含 500 万个条目的列,我希望有 5 列,每列包含 100 万个条目。

提前致谢!

最佳答案

我同意 @EdChum 的观点,即给定一个名为 s 的 Series 对象,这将是最简单的:

d = pd.DataFrame(s.values.reshape(1000000, -1))

这会将您的 Series reshape 为形状 (1,000,000, s.len/1,000,000) 的 DataFrame。

<小时/>

但是,仅当您的系列长度为 1,000,000 的整数倍时,上述方法才有效。或者,您可以执行以下操作:

    # note with python3, you need to use integer division // here
s.index = pd.MultiIndex.from_tuples([(x/1000000,x%1000000) for x in s.index])
# or an alternative below which does the same thing
#s.index = pd.MultiIndex.from_tuples(s.index.map(lambda x: (x/1000000, x%1000000)))
s.unstack(0)

这将为您提供几列相同长度的列,最后一列用 NaN 填充。

这是一个长度为 55 的系列示例,我希望将其拆分为长度为 10 的列。请注意,最后一列的最后 5 个值设置为 NaN:

In [42]: s = pd.Series(np.arange(55))

In [43]: s
Out[43]:
0 0
1 1
2 2
...
53 53
54 54
dtype: int64

# with python3 x//10, x%10
In [44]: s.index = pd.MultiIndex.from_tuples(s.index.map(lambda x: (x/10, x%10)))

In [45]: s.unstack(0)
Out[45]:
0 1 2 3 4 5
0 0 10 20 30 40 50
1 1 11 21 31 41 51
2 2 12 22 32 42 52
3 3 13 23 33 43 53
4 4 14 24 34 44 54
5 5 15 25 35 45 NaN
6 6 16 26 36 46 NaN
7 7 17 27 37 47 NaN
8 8 18 28 38 48 NaN
9 9 19 29 39 49 NaN

注意两件事:

  1. 对于非常大的数组,使用 s.index.map(lambda ...) 应该比列表理解更快。

  2. 如果使用 python3,请确保在 lambda 函数中使用整数除法:lambda x: (x//N, x % N)

关于python - 将 pandas 系列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37030476/

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