python - 元组元素到python中的数据框列
问题描述
我有包含 0-3 组对的 2D 列表(数据总是成对的)。
例子:
[[2.0, 0.1], [7.0, 0.6], [1.0, 0.3]] or
[[9.0, 0.7], [1.0, 0.2]] or
[[]]
我希望能够将每对的每个元素附加到现有数据框中自己的列中。
使用上述数据的所需数据框:
other_data, pair_0_0, pair_0_1, pair_1_0, pair_1_1, pair_2_0, pair2_1
'blah', 2.0, 0.1, 7.0, 0.6, 1.0, 0.3
'blah blah', 9.0, 0.7, 1.0, 0.2
'blaah'
它需要能够处理空值,并保持列表的顺序。
我尝试了以下方法,但如果我没有 3 对,它不会给出索引错误。
df.loc[len(df)] = ['blah blah', list2D[0][0], list2D[0][1], list2D[1][0], list2D[1][1], list2D[2][0], list2D[2][1]
我认为这将涉及一些列表理解,但我不知道该怎么做。
解决方案
numpy.ravel
在列表理解中怎么样:
l1 = [[2.0, 0.1], [7.0, 0.6], [1.0, 0.3]]
l2 = [[9.0, 0.7], [1.0, 0.2]]
l3 = [[]]
df = pd.DataFrame([np.ravel(x) for x in [l1, l2, l3]])
# Fix column headers
df.columns = [f'pair_{x//2}_{x%2}' for x in range(df.shape[1])]
[出去]
pair_0_0 pair_0_1 pair_1_0 pair_1_1 pair_2_0 pair_2_1
0 2.0 0.1 7.0 0.6 1.0 0.3
1 9.0 0.7 1.0 0.2 NaN NaN
2 NaN NaN NaN NaN NaN NaN
更新
例如,对于append
现有的单个列表,请使用:DataFrame
l4 = [[3.0, 0.2], [6.0, 0.8], [1.2, 0.6]]
df.append(pd.DataFrame([np.ravel(l4)]).rename(columns=lambda x: f'pair_{x//2}_{x%2}'))
[出去]
pair_0_0 pair_0_1 pair_1_0 pair_1_1 pair_2_0 pair_2_1
0 2.0 0.1 7.0 0.6 1.0 0.3
1 9.0 0.7 1.0 0.2 NaN NaN
2 NaN NaN NaN NaN NaN NaN
0 3.0 0.2 6.0 0.8 1.2 0.6
或者pandas.concat
在循环中使用DataFrame
从头开始创建你可以这样做:
df = pd.DataFrame()
for l in [l1, l2, l3]:
df = pd.concat([df, pd.DataFrame([np.ravel(l)]).rename(columns=lambda x: f'pair_{x//2}_{x%2}')],
sort=True)
推荐阅读
- build - 使用 --target 时,rpmbuild 因未知原因失败
- c# - 我怎样才能知道一个月中的哪一天?
- c# - 我的客户列表已填充,但不会显示在 Server Side Blazor 的 Foreach 循环中
- r - 如何在 r 中建立累积相乘元素的运行计数?
- java - Android Volley 请求未更新
- ag-grid - 从 ag-grid-community 迁移到带有角度的 ag-grid-enterprise 导致堆内存不足
- symfony - symfony 4 夹具日期时间方法不能使用 PDO 数据中的字符串总是设置为“现在”
- formula - 用于随机化数字的 Netsuite 公式
- r - 使用 rmarkdown::render 创建可重现的 pdf 报告时出错,但在编织时出错
- java - JTextField.getText() 返回一个空字符串