Convert pandas data frame to series

后端 未结 6 1504
忘了有多久
忘了有多久 2020-11-30 21:52

I\'m somewhat new to pandas. I have a pandas data frame that is 1 row by 23 columns.

I want to convert this into a series? I\'m wondering what the most pythonic way

6条回答
  •  北荒
    北荒 (楼主)
    2020-11-30 22:25

    You can transpose the single-row dataframe (which still results in a dataframe) and then squeeze the results into a series (the inverse of to_frame).

    df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)])
    
    >>> df.T.squeeze()  # Or more simply, df.squeeze() for a single row dataframe.
    a0    0
    a1    1
    a2    2
    a3    3
    a4    4
    Name: 0, dtype: int64
    

    Note: To accommodate the point raised by @IanS (even though it is not in the OP's question), test for the dataframe's size. I am assuming that df is a dataframe, but the edge cases are an empty dataframe, a dataframe of shape (1, 1), and a dataframe with more than one row in which case the use should implement their desired functionality.

    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
    

    This can also be simplified along the lines of the answer provided by @themachinist.

    if len(df) > 1:
        # Dataframe with multiple rows.  Implement desired behavior.
        pass
    else:
        result = pd.Series() if df.empty else df.iloc[0, :]
    

提交回复
热议问题