DSM*_*DSM 49
要理解它仍然是数学术语中的"载体",这还不够智能.
更确切地说,它足够聪明,可以识别维度的差异.:-)
我认为你能做的最简单的事情是选择行位置使用iloc,这会给你一个系列,其中列作为新索引,值作为值:
>>> 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'>
Run Code Online (Sandbox Code Playgroud)
Ale*_*der 44
您可以转置单行数据帧(仍然会生成数据帧),然后将结果压缩成一系列(反之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
Run Code Online (Sandbox Code Playgroud)
注意:为了适应@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
Run Code Online (Sandbox Code Playgroud)
这也可以根据@themachinist提供的答案简化.
if len(df) > 1:
# Dataframe with multiple rows. Implement desired behavior.
pass
else:
result = pd.Series() if df.empty else df.iloc[0, :]
Run Code Online (Sandbox Code Playgroud)
the*_*ist 29
您可以使用以下两种方法之一切片数据框来检索系列:
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
Run Code Online (Sandbox Code Playgroud)
nic*_*ass 16
如果您有一个单列数据框 df,您可以将其转换为一系列:
df.iloc[:,0] # pandas Series
Run Code Online (Sandbox Code Playgroud)
由于您有一个单行 dataframe df,因此您可以转置它,这样您就处于前一种情况:
df.T.iloc[:,0]
Run Code Online (Sandbox Code Playgroud)
小智 8
You can also use stack()
df= DataFrame([list(range(5))], columns = [“a{}”.format(I) for I in range(5)])
Run Code Online (Sandbox Code Playgroud)
After u run df, then run:
df.stack()
Run Code Online (Sandbox Code Playgroud)
You obtain your dataframe in series
小智 6
其它的办法 -
假设 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))
Run Code Online (Sandbox Code Playgroud)
以类似的方式,您可以从具有多列的 Dataframe 中获取系列。
| 归档时间: |
|
| 查看次数: |
177042 次 |
| 最近记录: |