这篇blog长期更新,总结一些python数据处理过程中常用的方法(不总结老是忘),我一般喜欢用dataframe做数据处理,所以一般会尽量转成pandas的dataframe格式。所有方法需要先导入库pandas和numpy。
import pandas as pd
import numpy as np
1. 生成dataframe
pd.DataFrame
# 输入二维向量,columns是列索引,index是行索引
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'], index = [0,1,2])
print(df)
# 输出:
"""
a b c
0 1 2 3
1 4 5 6
2 7 8 9
"""
更改行索引的显示顺序:
df.reindex
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'], index = [0,1,2])
df = df.reindex([2,1,0])
print(df)
# 输出
"""
a b c
2 7 8 9
1 4 5 6
0 1 2 3
"""
更新列索引名:
df.columns
df.rename
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'], index = [0,1,2])
# 法一,暴力法
df.columns=['a', 'b', 'f']
# 法二,当列索引的数量很多,用第二种比较好,可以只改一部分
df.rename(columns={'b':'e'}, inplace = True)
print(df)
# 输出
"""
a e f
0 1 2 3
1 4 5 6
2 7 8 9
"""
2. 读写数据文件
json:
# 读取方法一,针对利用pd.to_json()存的json十分合适
pd.read_json('xxx')
# 读取方法二,有时候读取的json文件,不是由pd.to_json存的,利用pd.read_csv可能会有问题,要用这种方法
with open('xxx') as f:
for i in f.readlines():
data = json.load(i)
# 写方法
pd.to_json('xxx')
csv:
# 读方法,nrows用于选择读取前多少行,usecols用于选择读取哪些列
df = pd.read_csv('xxx.csv', nrows = 10000, usecols = [0, 5, 82, 83])
# 写方法,ignore_index用于确定是否保存行索引,ignore_index=False会保存行索引
df.to_csv('xxx.csv', ignore_index=True)
txt:
# 读取
data=[]
f = open('xxx.txt', 'r')
for line in f:
info1, info2 = line.split(',') # 这里默认一行只有一个","来分割两个数据,可以视情况增加输出
data.append([info1, info2])
f.close
# 一般不建议保存成txt,可以直接保存成csv
3. 增加:
增加一列:
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'], index = [0,1,2])
df['d']=[4,7,10]
print(df)
# 输出
"""
a b c d
0 1 2 3 4
1 4 5 6 7
2 7 8 9 10
"""
如果增加一列,这一列是用已有的列计算出来的,注意如果原来的df中有’d’这一列,则会把数据替换掉。
df.assign
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'], index = [0,1,2])
df = df.assign(d = lambda x: x.a+x.b) # a索引列与b索引列相加
print(df)
# 输出
"""
a b c d
0 1 2 3 3
1 4 5 6 9
2 7 8 9 15
"""
df.assign是一个十分强大的函数,下面给出一个更复杂的情况,把df的’a’列的元素向下移动一列放到’d’列中。
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'])
df.assign(d = lambda x: x.b.shift(1))
# 输出
"""
a b c d
0 1 2 3 NaN
1 4 5 6 2.0
2 7 8 9 5.0
"""
指定位置增加一列
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'], index = [0,1,2])
df.insert(1,'B',[11,12,13]) #列索引的1位置插入一列
print(df)
# 输出
"""
a B b c
0 1 11 2 3
1 4 12 5 6
2 7 13 8 9
"""
增加一行:
df.append
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'], index = [0,1,2])
df = df.append({'a':10, 'b':11, 'c':12}, ignore_index=True)
print(df)
# 输出
"""
a b c
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
"""
4. 删除:
df.drop
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]], columns=['a', 'b', 'c'], index = [0,1,2])
df.drop('a',axis=1, inplace=True) # axis=1删除列,inplace为True表示直接对原表修改且返回None,默认是False
df = df.drop(0,axis=0) # axis=0删除行
print(df)
# 输出
"