制作单行数据框
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
我无法从 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