将数组作为单个元素放入DataFrame

时间:2018-07-24 12:13:57

标签: python pandas numpy

伙计们,

我有一个这样的字典:

dic = {}

dic['A'] = 1
dic['B'] = np.array([1,2,3])
dic['C'] = np.array([1,2,3,4])
dic['D'] = np.array([6,7])

然后我尝试将它们放入DataFrame中(也可能在以后插入更多行,但是每个元素的数组长度可能是可变的),出于某些原因,我想将它们保留为每列的整个对象,当打印,看起来像:

A             B             C        D
1       [1,2,3]     [1,2,3,4]    [6,7]
......
[2,3]     [7,8]     [5,6,7,2]        4

当我尝试通过以下方式进行操作时:

pd.DataFrame.from_dict(dic)

我总是会收到错误:ValueError:数组的长度必须相同

无论如何,我是否有将整个数组保持为单个元素的方法,但是有时候我也有一些单个值吗?

3 个答案:

答案 0 :(得分:0)

我不确定为什么您需要输入作为词典。但是,如果您将元素作为numpy数组传递,它将使用NaN转换缺少的值。

import React from 'react';
import { Layout, Menu, Icon } from 'antd';
import { NavLink } from 'react-router-dom';

const { Sider } = Layout;
const SubMenu = Menu.SubMenu;

class SideMenu extends React.Component {

  render() {
    return (
      <Sider
        trigger={null}
        collapsible
        collapsed={this.props.collapsed}
        >
          <div className="logo"/>
          <Menu theme="dark" mode="inline" defaultSelectedKeys={['1']}>
            <Menu.Item key="1">
              <NavLink to="/home">
                <Icon type="home"/>
                <span>home</span>
              </NavLink>
            </Menu.Item>
            <Menu.Item key="2">
              <NavLink to="/page1">
                <Icon type="star-o"/>
                <span>page 1</span>
              </NavLink>
            </Menu.Item>       
          </Menu>
        </Sider>
    );
  }
}

export default SideMenu;

输出:-

 public static string RemoveSpaces(this String Value)
    {
        RegexOptions options = RegexOptions.None;
        Regex regex = new Regex(@"[ ]{2,}", options);
        return regex.Replace(Value.Trim(), @" ");
    }

答案 1 :(得分:0)

IIUC应该可以工作

import pandas as pd
import numpy as np
df = pd.DataFrame({"A":[1, np.array([2,3])],
                   "B":[np.array([1,2,3]), np.array([7,8])],
                   "C":[np.array([1,2,3,4]), np.array([5,6,7,2])],
                   "D":[np.array([6,7]), 4]})

所以df.to_dict()返回

 {'A': {0: 1, 1: array([2, 3])},
 'B': {0: array([1, 2, 3]), 1: array([7, 8])},
 'C': {0: array([1, 2, 3, 4]), 1: array([5, 6, 7, 2])},
 'D': {0: array([6, 7]), 1: 4}}

更新 如果要保存到文件,则应考虑使用列表而不是numpy数组,并使用delimiter=';'

答案 2 :(得分:0)

如果要保持这种形状,可以将数组转换为字符串。