# -*- coding:utf-8 -*- """ DataFrame是二维数据结构,即数据以行和列的表格方式排列。 DataFrame的创建 df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False) data: 数据类型,例如list、dict、series、ndarray、map、DataFrame index: 行的标签,行的KEY columns: 列的标签,列的KEY dtype: 每列的数据类型 copy: 用于复制数据 """ import pandas as pd # 从list创建DataFrame 列表中的每个ITEM都是一行数据 data = [u'张三', u'李四', u'王五', u'赵六'] df = pd.DataFrame(data=data) print df # 0 # 0 张三 # 1 李四 # 2 王五 # 3 赵六 # 每个ITEM都是一行数据 data = [[u'张三', 20], [u'李四', 18], [u'王五', 26], [u'赵六', 30]] df = pd.DataFrame(data=data) print df # 0 1 # 0 张三 20 # 1 李四 18 # 2 王五 26 # 3 赵六 30 # ITEM数据长度不等时,少的会用NaN来填充 data = [[u'张三', 20], [u'李四', 18], [u'王五'], [u'赵六', 30]] df = pd.DataFrame(data=data) print df # 0 1 # 0 张三 20.0 # 1 李四 18.0 # 2 王五 NaN # 3 赵六 30.0 # 列表中嵌套字典,字典中的KEY值为列名 data = [ {'name': u'张三', 'age': 20, 'sex': 'man'}, {'name': u'李四', 'age': 18}, {'name': u'王五'}, {'name': u'赵六', 'age': 30} ] df = pd.DataFrame(data=data) print df # age name sex # 0 20.0 张三 man # 1 18.0 李四 NaN # 2 NaN 王五 NaN # 3 30.0 赵六 NaN # 添加列名称 columns = [u'姓名', u'年龄'] # 长度必须和最多的列数相等 data = [[u'张三', 20], [u'李四', 18], [u'王五', 26], [u'赵六', 30]] df = pd.DataFrame(data=data, columns=columns) print df # 姓名 年龄 # 0 张三 20 # 1 李四 18 # 2 王五 26 # 3 赵六 30 # 添加行名称 index = ['001', '002', '003', '004'] # 长度必须和data行数相等 columns = ['name', 'age'] data = [[u'张三', 20], [u'李四', 18], [u'王五', 26], [u'赵六', 30]] df = pd.DataFrame(data=data, index=index, columns=columns) print df # name age # 001 张三 20 # 002 李四 18 # 003 王五 26 # 004 赵六 30 # 从dict创建DataFrame,字典中的每个KEY代表一列,KEY值为列名,value的长度必须相等 data = { 'name': [u'张三', u'李四', u'王五', u'赵六'], 'age': [20, 18, 26, 30] } index = ['001', '002', '003', '004'] df = pd.DataFrame(data=data, index=index) print df # age name # 001 20 张三 # 002 18 李四 # 003 26 王五 # 004 30 赵六 # 从dict创建DataFrame,用series类型做为value,字典中的每个KEY代表一列,KEY值为列名,value的长度可不相等 data = { 'name': pd.Series([u'张三', u'李四', u'王五', u'赵六'], index=['001', '002', '003', '004']), 'age': pd.Series([20, 18, 30], index=['001', '002', '004']) } df = pd.DataFrame(data=data, ) print df # age name # 001 20.0 张三 # 002 18.0 李四 # 003 NaN 王五 # 004 30.0 赵六 # 从dict创建DataFrame,指定列名会得到只有列名的DataFrame data = { 'name': [u'张三', u'李四', u'王五', u'赵六'], 'age': [20, 18, 26, 30] } columns = ['name1', 'age1'] df = pd.DataFrame(data=data, columns=columns) print df # Empty DataFrame # Columns: [name1, age1] # Index: [] # DataFrame列的操作 data = { 'name': pd.Series([u'张三', u'李四', u'王五', u'赵六'], index=['001', '002', '003', '004']), 'age': pd.Series([20, 18, 30], index=['001', '002', '004']), 'sex': pd.Series(['man'], index=['001']) } df = pd.DataFrame(data=data, ) print df # age name sex # 001 20.0 张三 man # 002 18.0 李四 NaN # 003 NaN 王五 NaN # 004 30.0 赵六 NaN # 列的选择,通过指定列名 print df['name'] # 1 NaN # 001 张三 # 002 李四 # 003 王五 # 004 赵六 # Name: name, dtype: object # 列的添加,直接赋值 df['addr'] = pd.Series(['beijing','shanghai','guangzhou'], index=['001', '002', '004']) print df # age name sex addr # 1 NaN NaN man NaN # 001 20.0 张三 NaN beijing # 002 18.0 李四 NaN shanghai # 003 NaN 王五 NaN NaN # 004 30.0 赵六 NaN guangzhou