1、利用pandas读取中文路径:
import pandas as pd
f = open("./动脉期图像.csv", encoding="utf-8")
data = pd.read_csv(f)
2、利用pandas迭代读取csv文件,缓解内存压力
import pandas as pd
import gc
# python利用pandas迭代读取数据
reader = pd.read_csv('E:/python/game_logs.csv', iterator=True)
loop = True
chunksize = 10000
chunks = []
while loop:
try:
chunk = reader.get_chunk(1000)
chunks.append(chunk)
except StopIteration:
loop = False
print("Iteration is stopped.")
df = pd.concat(chunks, ignore_index=True)
3、pandas读取各种格式的文件:
pd.read_csv(filepath)# :从 CSV 文件导入数据
pd.read_table(filepath)# :从限定分隔符的文本文件导入数据
pd.read_excel(filepath)#:从 Excel 文件导入数据
pd.read_sql(query, connection_object)#:从 SQL 表 / 库导入数据
pd.read_json(json_string)#:从 JSON 格式的字符串导入数据
pd.read_html(url)#:解析 URL、字符串或者 HTML 文件,抽取其中的 tables 表格
pd.read_clipboard()#:从你的粘贴板获取内容,并传给 read_table()
pd.DataFrame(dict)#:从字典对象导入数据,Key 是列名,Value 是数据
## 原文:https://blog.youkuaiyun.com/sinat_41104353/article/details/85052343
pd.read_table(filepath, header=None'#不要headers#',names=['#自己设置列名#'])
# pandas读取指定列的办法
data1.columns=['a', 'b','c']# 获取a,b,c三列
data1[data1.columns[1:]]
## 注意:data1[5:10]
## 这里取6到11行的所有数据,而不是列数据
4、将两张表按同一id合并起来:
import pandas as pd
prior = pd.read_csv('./order_products__prior.csv')
products = pd.read_csv('./products.csv')
_mg = pd.merge(prior, products, on=['product_id', 'product_id']) # 输入要合并的表和表间联系的键
以上为读取数据过程中常用的一些技巧。
5、读取纯数据,并给其添加列名
# 读取数据
import pandas as pd
# 构造列名
column_names = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', names=column_names)
5_2、读取数据后,删除缺失值(元数据中缺失值用?代替)
# 缺失值进行处理
import numpy as np
data = data.replace('?', np.nan)
# 删除缺失值
data = data.dropna()
5_3、进行数据的分割,将1---9列赋值给x,第10列赋值给y
x = data.ix[:, 1:10]
y = data.ix[:, [10]]
6、pandas读取csv内容,并想删除某一列:
【表名中最好不要有中文字符】
import pandas as pd
data = read_csv('......')
data = data.drop(['列索引'],axis=1) # 1按列删除,0是按行删除
7、查看各列数据的缺失值情况:
df = pd.read_csv()
print('查看缺失值情况:', df.isnull().sum())
8、pandas显示所有的列和行(去掉引号显示)
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
#设置pandas数据输出宽度,避免数据进行换行显示
pd.set_option('display.width',450) #设置宽度为450
9、pandas的ix/iloc/loc(获取某一行或多行数据)的区别:
.loc[i, '列名']:loc专注于取行数,'列名'可加可不加,加上就是取i行该列,不加就是取整个i行
import pandas as pd
data=[[1,2,3],[4,5,6]]
index=['a','b']#行号
columns=['c','d','e']#列号
df=pd.DataFrame(data,index=index,columns=columns)#生成一个数据框
# 【注意】:取第一行的三种方式(以下三种方式结果相同)
#1、iloc
df.iloc[0]
##【注意】也可以用df.iloc获取指定的行列数据
df.iloc[1,1:3]#获取第2行,第2、3列的数据
# 2、loc
df.loc['a']
# 3、ix
df.ix[0]
df.ix['a']
# c 1
# d 2
# e 3
# Name: a, dtype: int64
# 【注意】:获取某一列或多列数据的方法
#1、获取某一列
df['c']#获取‘c’列
#2、获取多列
df[df.columns[0:2]]#获取第一列和第二列
-10-、筛选出类别型(object)列的列名:
import pandas as pd
df = pd.read_csv()
object_lst = df.dtypes
object_lst = list(object_lst[object_lst=='object'].index)
10、对一列数据(最好是分类数据)进行类数统计:
from collections import Counter
Counter(data['labels']) # 对labels列进行每类个数的统计
# 上面是之前的笨办法,其实pd中有自己的函数去统计每类值的出现个数
import pandas as pd
data = pd.read_csv('')
data['a'].value_counts()
11、分别提取时间戳的年 月 日 时 分 秒:
import pandas as pd
data = read_csv('......')
# 1、先将时间戳转换为标准时间格式
time_value = pd.to_datetime(data['time'], unit='s') # 时间戳 ------> 1970-01-01 18:09:48
# 2、把日期格式1970-01-01 18:09:48转换成字典格式
time_value = pd.DatetimeIndex(time_value)
# 3、提取相应的值即可
data['day'] = time_value.day
data['hour'] = time_value.hour
data['weekday'] = time_value.weekday
11、根据一些值的范围缩减数据 ,进行数据筛选:
import pandas as pd
data = read_csv('......')
data = data.query('x>1.0 & x<1.25 & y>2.5 & y<2.75') # 类似于sql语句
12、dataframe数据给索引加上一个列名,方便调用“索引”值(reset_index后,原来的索引已经不是索引了) ;
13、作出各变量间的相关系数阵
import pandas as pd
import numpy as np
data = pd.read_csv(inputfile)
# 输出皮尔逊相关系数
np.round(data.corr(method='pearson'), 2)
# 再根据系数矩阵,画出热力图
import seaborn as sns
import matplotlib.pylab as plt
plt.figure(figsize=(62,54))
corr = data.corr()
sns.heatmap(corr, fmt='.lg', annot=True, cbar=False)
# 根据特征值与目标值的相关性,剔除相关性低的特征值变量
corr_labels = np.abs(corr['目标值变量']).sort_values(ascending=False)
## 选择相关程度在0.04以上的特征作为新的特征
index = list(corr_labels[corr_labels>0.4].index)
del index[0]
new_feature = data[index]
14、pandas快速往DataFrame中插入一行数据:
# 【注意】新插入的数据必须带有索引index
data = pd.read_csv(...)
data.loc['index'] = [...]
15、pandas的unique:
data = pd.read_csv(...)
data['a'].unique() # 查看‘a’列中的唯一值,但是不会返回个数
pandas的read_csv()参数总结(仍在补充中)[经常遇到的]:
# 1、打开带有中文路径的csv文件:
## 第一步:
fr = open('中文路径', encoding='utf-8')
## 第二步:
pd.read_csv(f)
# 2、遇到数据表中没有列名需要自己添加:
## 方法一
pd.read_csv('文件路径', header=None)
a.columns = ['a', 'b', ...]
## 方法二
pd.read_csv('文件路径', names = ['a', 'b', ...])
# 3、默认分隔符
pd.read_csv('文件路径', sep=',')
# 4、分批读取数据
## 详见第8条内容
pd.read_csv('文件路径', iterator=True)
# 5、在读取文件时,pd会自动将默认会将'-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN',
## '#N/A N/A','#N/A', 'N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan', ''转换为
## NaN,关闭默认:
pd.read_csv('文件路径', keep_default_na=False)
# 6、在读取数据时指定索引列
pd.read_csv('文件路径',set_index='将作为索引的列名')
# 7、在指定列名后,会出现一种怪象,如下所示,此时要索引某一列,要加两个中括号“[]”
name sex age ...
id
1 s 0 5
2 d 1 6
此时,用data[['name']]才能索引到name这一列
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、markdown编辑技巧
1、插入图片,并调整图片大小
第一种办法:
<p align='center>
<img src='./images/1.jpg' alt='sample' width='400' heigth='300'>
<p align='center'>
<em>Figure 1 : Minimizing the cost is like finding the lowest point in a hilly landscape</em>
</p>
</p>
第二种方法:
<img src="./images/1.jpg" style="width:650px;height:300px;">
<caption><center> <u> **Figure 1** </u>: **Minimizing the cost is like finding the lowest point in a hilly landscape**</center></caption>
2、用一个网址查看github上的ipynb文件:
https://nbviewer.jupyter.org/github/ + ‘github上ipynb的路径’