簡體   English   中英

Pandas:從系列創建 DataFrame

[英]Pandas : Creating a DataFrame from Series

我想連接幾個系列變量(沿軸 = 1)以創建 DataFrame。 我希望系列的名稱在 DataFrame 中顯示為列名。 我遇到了幾種方法來做到這一點。

在我看來,最直觀的方法如下:

import pandas as pd

x1 = pd.Series([1,2,3],name='x1')
x2 = pd.Series([11,12,13],name='x2')
              
df = pd.DataFrame([x1,x2])
print(df)

但不是將系列命名為列標題,而是將系列數據用作 DataFrame 中的行。

     0   1   2
x1   1   2   3
x2  11  12  13

由於兩個原因,這讓我覺得違反直覺。

  • Series 中的數據很可能是一種數據,即股票價格、時間序列數據等。因此,在 DataFrame 中,Series 數據應該是一列而不是一行,這似乎很直觀。

  • 從現有的 DataFrame 中提取列作為系列時,列名用作系列的名稱。

例子:

df = pd.DataFrame({'x1' : [1,2,3], 'x2' : [4,5,6]})
print(type(df['x1']))
print(df['x1'].name)

<class 'pandas.core.series.Series'>
x1

那么為什么在從系列構造 DataFrame 時,名稱不用作列 header 呢?```

我總是可以從字典中構造一個 DataFrame 以獲得我想要的結果:

df = pd.DataFrame({'x1' : x1, 'x2' : x2})
print(df)

   x1  x2
0   1  11
1   2  12
2   3  13

但這讓我覺得很尷尬,因為我必須復制系列的名稱(或者至少在字典的構造中引用它們)。

另一方面,Pandas concat方法可以滿足我對默認行為的期望:

df = pd.concat([x1,x2],axis=1)
print(df)

   x1  x2
0   1  11
1   2  12
2   3  13

所以,我的問題是,當從系列變量列表構造 DataFrame 時,為什么我使用concat得到的行為不是默認行為?

x1 = pd.Series([1,2,3],name='x1')
x2 = pd.Series([11,12,13],name='x2')

df = pd.DataFrame([x1,x2]).transpose()
>>> df
   x1  x2
0   1  11
1   2  12
2   3  13

因為pd.DataFrame不會為您制作zip

>>> pd.DataFrame(zip(x1, x2), columns=[x1.name, x2.name])
   x1  x2
0   1  11
1   2  12
2   3  13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM