[英]Convert pandas data frame to series
我對熊貓有點陌生。 我有一個 1 行 x 23 列的熊貓數據框。
我想把它轉換成一個系列? 我想知道最pythonic的方法是什么?
我試過pd.Series(myResults)
但它抱怨ValueError: cannot copy sequence with size 23 to array axis with dimension 1
。 意識到它仍然是數學術語中的“向量”還不夠聰明。
謝謝!
您可以轉置單行數據幀(仍會產生數據幀),然后將結果壓縮成一個系列(與to_frame
)。
df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)])
>>> df.squeeze(axis=0)
a0 0
a1 1
a2 2
a3 3
a4 4
Name: 0, dtype: int64
注意:為了適應@IanS 提出的觀點(即使它不在 OP 的問題中),請測試數據框的大小。 我假設df
是一個數據框,但邊緣情況是一個空數據框、一個形狀為 (1, 1) 的數據框和一個具有多行的數據框,在這種情況下,使用應該實現其所需的功能。
if df.empty:
# Empty dataframe, so convert to empty Series.
result = pd.Series()
elif df.shape == (1, 1)
# DataFrame with one value, so convert to series with appropriate index.
result = pd.Series(df.iat[0, 0], index=df.columns)
elif len(df) == 1:
# Convert to series per OP's question.
result = df.T.squeeze()
else:
# Dataframe with multiple rows. Implement desired behavior.
pass
這也可以按照@themachinist 提供的答案進行簡化。
if len(df) > 1:
# Dataframe with multiple rows. Implement desired behavior.
pass
else:
result = pd.Series() if df.empty else df.iloc[0, :]
意識到它仍然是數學術語中的“向量”還不夠聰明。
不如說它足夠聰明,可以識別維度上的差異。 :-)
我認為您可以做的最簡單的事情是使用iloc
位置選擇該行,這為您提供了一個 Series,其中列作為新索引,值作為值:
>>> df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)])
>>> df
a0 a1 a2 a3 a4
0 0 1 2 3 4
>>> df.iloc[0]
a0 0
a1 1
a2 2
a3 3
a4 4
Name: 0, dtype: int64
>>> type(_)
<class 'pandas.core.series.Series'>
您可以使用以下兩種方法之一通過切片數據框來檢索系列:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.random.randn(1,8))
series1=df.iloc[0,:]
type(series1)
pandas.core.series.Series
你也可以使用 stack()
df= DataFrame([list(range(5))], columns = [“a{}”.format(I) for I in range(5)])
在你運行 df 之后,然后運行:
df.stack()
您連續獲得數據框
另一種方式 -
假設 myResult 是包含 1 列和 23 行形式的數據的數據幀
# label your columns by passing a list of names
myResult.columns = ['firstCol']
# fetch the column in this way, which will return you a series
myResult = myResult['firstCol']
print(type(myResult))
以類似的方式,您可以從 Dataframe 中獲取具有多列的系列。
如果您有一個單列數據框 df,則可以將其轉換為系列:
df.iloc[:,0] # pandas Series
由於您有一個單行數據框df
,您可以轉置它,以便您處於前一種情況:
df.T.iloc[:,0]
data = pd.DataFrame({"a":[1,2,3,34],"b":[5,6,7,8]})
new_data = pd.melt(data)
new_data.set_index("variable", inplace=True)
這給出了一個數據框,其索引作為數據的列名,並且所有數據都存在於“值”列中
另一種方法很簡單
df= df.iloc[3].reset_index(drop=True).squeeze()
Squeeze -> 是轉換為 Series 的那個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.