[英]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.