簡體   English   中英

將熊貓數據框轉換為系列

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

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