Ste*_*uly 6 python initialization dataframe pandas
我得到了变量“v”,它是一个二维数组:
in = v
out =
array([[ 217.1, 252.5],
[ 73. , 53. ],
[ 83. , 827. ],
...,
[ 129. , 1214. ],
[ 118.6, 908.2],
[ 90. , 99.5]])
Run Code Online (Sandbox Code Playgroud)
我有一个包含多列的数据框,现在我想将此数组添加到 2 个单独的列中。所以:
x y
271.1 252.5
Run Code Online (Sandbox Code Playgroud)
等等。
我怎样才能做到这一点?
我试过:
df["Q_pred"],df["r_pred"] = v
Run Code Online (Sandbox Code Playgroud)
但这给出了错误:
ValueError: too many values to unpack (expected 2)
Run Code Online (Sandbox Code Playgroud)
老实说,我不知道该怎么做。
这是一个正确的想法,但您需要转换后的矩阵:
import pandas as pd
import numpy as np
v = np.array([[ 217.1, 252.5],
[ 73. , 53. ],
[ 83. , 827. ],
[ 129. , 1214. ],
[ 118.6, 908.2],
[ 90. , 99.5]])
df = pd.DataFrame()
df["Q_pred"], df["r_pred"] = v.T
Q_pred r_pred
0 217.1 252.5
1 73.0 53.0
2 83.0 827.0
3 129.0 1214.0
4 118.6 908.2
5 90.0 99.5
Run Code Online (Sandbox Code Playgroud)
这也适用于已经填充的数据框:
df["asdf"],df["qwetz"] = v.T
Q_pred r_pred asdf qwetz
0 217.1 252.5 217.1 252.5
1 73.0 53.0 73.0 53.0
2 83.0 827.0 83.0 827.0
3 129.0 1214.0 129.0 1214.0
4 118.6 908.2 118.6 908.2
5 90.0 99.5 90.0 99.5
Run Code Online (Sandbox Code Playgroud)
或更短,无需转换,并在一行中:
df = pd.DataFrame(v, columns=['Q_pred', 'r_pred'])
Q_pred r_pred
0 217.1 252.5
1 73.0 53.0
2 83.0 827.0
3 129.0 1214.0
4 118.6 908.2
5 90.0 99.5
Run Code Online (Sandbox Code Playgroud)
一次向现有 DataFrame 添加多个列很容易。只需使用新列的列表进行分配,然后将numpy数组转换为 DataFrame:
df[['Q_pred', 'r_pred']] = pd.DataFrame(v)
Run Code Online (Sandbox Code Playgroud)
Q_pred r_pred
0 217.1 252.5
1 73.0 53.0
2 83.0 827.0
3 129.0 1214.0
4 118.6 908.2
5 90.0 99.5
Run Code Online (Sandbox Code Playgroud)