5种创建Dataframe方法

下面将简要介绍Dataframe的5种创建方法,由于输出结果比较冗余,这里将不会展示输出结果,读者可以自行赋值粘贴,最好使用jupyter运行,并查看结果。另外的,代码中有非常详细的注释。

Dataframe创建方法一

import numpy as np
import pandas as pd

data1 = {
    "a":[1,2,3],
    "b":[4,5,6],
    "c":[7,8,9]   
}
data2 = {
    "one":np.random.rand(3),
    "two":np.random.rand(3)    # 这里尝试“two”:np.random.rand(4)会报错,
}

df1 = pd.DataFrame(data1)
# df1 = pd.DataFrame(data1,index = ["a","b","c"])
df2 = pd.DataFrame(data2)
print(df1)
print(df1.index)
print(df1.columns)
print()
print(df2)
print(df2.index)
print(df2.columns)

# 总结:由数字/list组成的字典,创建Dataframe,columns为字典的key,index为默认数字标签
# 并且字典的值的长度必须保持一致
# print("------------------------------------------")
# df1.columns = ["b", "a","c"]
# print(df1)  # 这里将会对columns参数重命名,数值不变,但是必须整体修改columns,即参数个数与columns个数相同
# df2.columns = ["one1","two2"]
# print(df2)
print("-------------------------------------------")
print(df1)
df1 = pd.DataFrame(data1, columns = ["b", "c", "a", "d"])
print(df1)
print('----------------------------------------------')
df1 = pd.DataFrame(data1, columns = ["b", "c"])
print(df1)

# columns 参数:可以重新指定列的顺序,格式为list,如果现有数据中没有该列,则产生NaN值
# 如果columns重新指定的时候,列的数量可以少于原数据
print("---------------------------------------------")
df2 = pd.DataFrame(data2, index = ["f1", "f2", "f3"])  # 指定index
print(df2)
# 尝试index = ["f1", "f2", "f3", "f4"],这里会报错,因此在指定索引的时候,其格式为list,
# 且必须将长度保持一致

Dataframe创建方法二:由Series组成的字典

data1 = {"one":pd.Series(np.random.rand(2)),
            "two":pd.Series(np.random.rand(3))
        }  # 没有设置index的Series
data2 = {"one":pd.Series(np.random.rand(2), index = ["a", "b"]),
        "two":pd.Series(np.random.rand(3), index = ["a", "b", "c"])}

print(data1)
print(data2)
print("-----------------------------------")
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(df1)
df3 = pd.DataFrame(data1, index = ["a", "b"])
print(df3)
print(df2)
# print()

# 总结:由Series组成的字典,创建Dataframe, columns为字典key, index为Series的标签(如果
#     Series没有指定标签,则默认数字标签)

# 另外的, Series可以长度不一样,生成的Dataframe会出现NaN值。这里和前面的使用list的字典创建爱
# Dataframe最大的不同点,它会自动对齐

方法三,通过二维数组之间创建 (最常用的方法)

ar = np.random.rand(9).reshape(3,3)
print(ar)
df1 = pd.DataFrame(ar)
print(df1)
print()
df2 = pd.DataFrame(ar, index = ["a","b","c"], columns = ["one", "two", "three"])
print(df2)

print("-------------------尝试---------------------------")
# index和columns长度不等于原数组的情况
# df2 = pd.DataFrame(ar, index = ["a","b","c"], columns = ["one", "two", "three", "four"])  # 报错
# ValueError: Shape of passed values is (3, 3), indices imply (4, 3)

# df2 = pd.DataFrame(ar, index = ["a","b","c", "d"], columns = ["one", "two", "three"])  # 报错
# ValueError: Shape of passed values is (3, 3), indices imply (3, 4)

# df2 = pd.DataFrame(ar, index = ["a","b"], columns = ["one", "two", "three"])  # baocuo
# ValueError: Shape of passed values is (3, 3), indices imply (3, 2)

# df2 = pd.DataFrame(ar, index = ["a","b", "c"], columns = ["one", "two"])  # baocuo
# ValueError: Shape of passed values is (3, 3), indices imply (2, 3)

df2 = pd.DataFrame(ar, columns = ["one", "two","three"])
print(df2)

# 总结:通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不能指定index和columns,
# 两者均返回默认数字格式

# index和columns指定长度和原数组保持一致

方法四:由字典组成的列表

data = [{"one":1,"two":2},{"one":5,"two":10,"three":15}]
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data, index = ["a", "b"])
df3 = pd.DataFrame(data, columns = ["one", "two"])
df4 = pd.DataFrame(data, columns = ["one", "two", "three"])
df5 = pd.DataFrame(data, columns = ["one", "two", "three", "fff"])
print(df1)
print()
print(df2)
print()
print(df3)
print()
print(df4)
print()
print(df5)
# 总结:由字典组成的列表创建Dataframe, columns为字典的key, index不做指定默认为数字标签

方法五:由字典组成的字典

import numpy as np
import pandas as pd

data = {
    "Jack":{"math":90, "english":89, "art":78},
    "Marry":{"math":82, "english":95, "art":96},
    "Tom":{"math":85, "english":94}
}
df1 = pd.DataFrame(data)
print(df1)
print()

df2 = pd.DataFrame(data, columns = ["Jack", "Tom", "Bob"])
print(df2)
print()

df3 = pd.DataFrame(data, index = ["a", "b", "c"], columns = ["Jack", "Tom", "Bob"])
# AttributeError: 'list' object has no attribute 'astype'
print(df3)
print()
df4 = pd.DataFrame(data, index = ["art", "math", "english"], columns = ["Jack", "Tom", "Bob"])
print(df4)
print()

print(df1["Jack"])
print(df1.loc["art"])

# 总结:columns参数可以增加和减少现有列,如出现新的列,值为NaN
# index在这里和之前不同,并不能改变原有index,如果出现新的标签,值为NaN(非常重要)
  • 27
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值