制作单行数据框

Make One-Row Dataframe

我无法从 3 个单独的数字构建数据框。我想这样做是为了 return 数据框的函数,然后我将其附加到其他现有结果。

期望的结果是一个包含名为 "a"、"b" 和 "C" 列的数据框,每个列都包含 a、b 和 c 的值。

试一试:

a=1
b=2
c=3
dat=pd.DataFrame([a,b,c], columns=list('abc')) #fails with size error

尝试两个:

dat=pd.DataFrame()
dat['a']=pd.np.nan
dat['b']=pd.np.nan
dat['c']=pd.np.nan

dat['c']=c # no numbers are added to the column; still has 0 rows

我在这里错过了什么?

想要的结果是:

    a  | b  | c
   -------------
    1  | 2  | 3
pd.DataFrame([[a, b, c]], columns=['a', 'b', 'c'])

   a  b  c
0  1  2  3

请注意,您的“额外要求”实际上是不可能的,因为一个对象可能与多个变量相关联(考虑一下)。

不过,您可以考虑使用字典。

data = {'a' : 1, 'b' : 2, 'c' : 3}
pd.DataFrame(data, index=[0])  # the `index` argument is important 

   a  b  c
0  1  2  3
 

单追加

对于单个追加,无需创建单独的数据框进行追加。

# ensure columns ordered appropriately.
df = df[['a', 'b', 'c']]

# define values
values = [1, 2, 3]

# add values to row at end of dataframe
df.loc[len(df.index)+1] = values

多次追加

持续附加数据帧效率极低。

一个更好的主意是将您的结果附加到列表中,以形成列表的列表。然后从这个列表列表创建一个数据框,并附加到原始数据框。这是因为附加到列表比附加到数据框便宜得多。

假设您在包含要追加的数据的可迭代 iter_values 中有一些值。 iterable 中的每个项目都是 3 个数字的列表。

lst = []

# loop through iterable, adding items to list
for values in iter_values:
    lst.append(values)

# create dataframe from list of lists
df_append = pd.DataFrame(lst, columns=list('abc'))

# append to original dataframe, ignoring index
df = df.append(df_append, ignore_index=True)

注意,您应该遵循 what cold 和 jpp 的构造来创建单行数据框,但在这里我尝试修复您的代码。将 DataFrame 调用更改为

pd.Series([a,b,c], index=list('abc')).to_frame(0).T
Out[15]: 
   a  b  c
0  1  2  3