[英]Splitting pandas series into multiple columns
我正在從數據庫中提取大量條目(> 15百萬條目),目的是導出到CSV文件。 我在請求結束時得到的是一個包含超過1500萬行的單列數據幀。 我正在尋找一個函數來將條目分成每百萬個條目的多個列。
因此,對於一個500萬條目的欄目,我想擁有5列,每列100萬個條目。
提前致謝!
我同意@EdChum,鑒於名為s
的Series對象,這將是最簡單s
:
d = pd.DataFrame(s.values.reshape(1000000, -1))
這會將你的系列重塑成一個形狀的數據框架(1,000,000, s.len / 1,000,000)
。
但是,上述僅適用於長度為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
注意兩件事:
使用s.index.map(lambda ...)
應該比非常大的數組的列表理解更快。
如果使用python3,請確保在lambda函數中使用整數除法: lambda x: (x // N, x % N)
。
而最丑陋的代碼獎項就是....
x = 1000000
pd.concat([pd.DataFrame(np.array(df[df.columns[0]].tolist())[:-(len(df)%x )].reshape(len(df)//x, x)), pd.DataFrame(df[df.columns[0]].tolist()[len(df) - len(df)%x:])] , axis=1)
您應該設置為x的任何值。 毫無疑問,東西可以100%漂亮,只是搞亂了ipython;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.