首页 > 编程 > Python > 正文

使用python在本地电脑上快速处理数据

2020-02-16 01:44:55
字体:
来源:转载
供稿:网友

大数据一般是在“云”上玩的,但“云”都是要钱的,而且数据上上下下的也比较麻烦。所以,在本地电脑上快速处理数据的技能还是要的。

pandas

在比赛中学到的一个工具,本地可以在亿级别的数据上进行聚合等操作。内部的数据包括:
• Series:一维数组,每个元素有一个标签
• DataFrame:二维表格,可以看做Series的集合
• Panel:三维数据

数据的初始化

我们可以通过构造函数来初始化,从下面的代码中可以想象得到数据是样子:

from pandas import Series, DataFrames = Series(data=[1, 2, 3], index=['a', 'b', 'c'])df = DataFrame(  data=[    [1, 2, 3],    [4, 5, 6],    [7, 8, 9]  ],  index=['i1', 'i2', 'i3'],  columns=['c1', 'c2', 'c3'])

如果源数据是格式比较好的CSV(或者是自己加工生成的中间数据),可以直接读取:
df = pandas.read_csv("../volume.csv", header=0)

数据的更新

更新结构

在定义完成之后可以对行、列进行增减(增减数据、修改结构):
• 增加列: • df.insert(3, 'new_column', [4, 7, 10])
• df['c4'] = [4, 7, 10]

• 删除列 • df.pop('c1')
• df = df.drop('c1', axis=1)

• 增加行:一般不要动态的增加行,据说新能不高 • df.loc['i4'] = [10, 11, 12]
• df.loc['i4'] = {'c1': 10, 'c2': 11, 'c3': 12}

• 删除行: • df = df.drop('i1', axis=0)

更新数据

我们可以精确修改单个位置的值:
• df['c1']['i1'] = 77
• df.ix[1, 2] = 66

合并数据

数据很多时候分布在不同的DataFrame中,要使用需要将他们进行合并,第一种方式是concat(基础方法):

import pandas as pddf1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],          'B': ['B0', 'B1', 'B2', 'B3'],          'C': ['C0', 'C1', 'C2', 'C3'],          'D': ['D0', 'D1', 'D2', 'D3']},          index=[0, 1, 2, 3])df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],          'B': ['B4', 'B5', 'B6', 'B7'],          'C': ['C4', 'C5', 'C6', 'C7'],          'D': ['D4', 'D5', 'D6', 'D7']},          index=[4, 5, 6, 7])result = pd.concat([df1, df2])

合并完的结果为:

  A  B  C  D0 A0 B0 C0 D01 A1 B1 C1 D12 A2 B2 C2 D23 A3 B3 C3 D34 A4 B4 C4 D45 A5 B5 C5 D56 A6 B6 C6 D67 A7 B7 C7 D7

其参数含义如下:
• objs :合并的数据(Series、DataFrame)
• axis :合并轴方向,行(0)、列(1)
• join :关联类型(inner、outer)
• join_axes :结果行,eg: pd.concat([df1, df2], axis=1, join_axes=[pd.Int64Index([1, 2, 3])])
• ignore_index :是否忽略objs中传入的索引
• keys :来自不同表的index,每个表一个(ignore_index=True时不管用)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表