简介
数据科学家George Seif分享了23个pandas基本操作,让我们一起来练练手。
默认导入pandas格式如下:
1 |
import pandas as pd |
1. 读取csv格式文件
1 2 3 |
pd.read_csv('file.csv') pd.read_csv('file1.csv', sep=',') pd.read_csv('file2.csv', sep=',', header=None) |
可以使用sep
参数指定分割的方式,使用header
参数选择是否获取columns
列。
2.读取Excel格式文件
1 |
pd.read_excel('file.xlsx', <span class="crayon-v">sheet_name</span><span class="crayon-o">=</span><span class="crayon-s">'Sheet1'</span>) |
通过sheet_name
参数指定读取的sheet
。
3.写入csv格式文件
1 |
df.to_csv("file.csv", sep=",", index=False) |
将一个数据写入csv,可以指定分割符sep
,以及是否把索引写入。
4.获取基本信息
1 |
df.info() |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
>>>df = pd.DataFrame(np.random.randn(4, 3), index=['aa', 'bb', 'cc', 'dd'], columns=list('abc')) >>>df a b c aa -0.604545 -1.200074 0.452631 bb 0.080309 1.940737 -0.138530 cc 1.110203 0.435318 0.380968 dd 0.961415 1.040802 0.609253 >>>df.info() <class 'pandas.core.frame.DataFrame'> Index: 4 entries, aa to dd Data columns (total 3 columns): a 4 non-null float64 b 4 non-null float64 c 4 non-null float64 dtypes: float64(3) memory usage: 128.0+ bytes |
获取基本信息在数据预处理阶段非常实用,可以看到所有数据的类型和大小。
5.统计信息
1 |
df.describe() |
代码演示:
1 2 3 4 5 6 7 8 9 10 |
>>>df.describe() a b c count 4.000000 4.000000 4.000000 mean 0.386846 0.554196 0.326080 std 0.802122 1.322986 0.324077 min -0.604545 -1.200074 -0.138530 25% -0.090904 0.026470 0.251093 50% 0.520862 0.738060 0.416799 75% 0.998612 1.265786 0.491786 max 1.110203 1.940737 0.609253 |
该方法可以显示数据的统计信息,获得数据的分布情况。
6.表格中打印DataFrame
1 |
print(tabulate(print_table, headers=headers)) |
首先要确保有tabulate库,导入方法为:
1 |
from tabulate import tabulate |
代码演示:
1 2 3 4 5 6 7 |
>>>print(tabulate(df.values, headers=df.columns)) a b c ----------- --------- --------- 0.0572505 0.30883 -0.497176 1.02226 -0.523748 0.577799 -0.00269256 -1.43111 -0.845521 -1.29325 0.252396 -0.556003 |
7.列出列名
1 |
df.columns |
代码演示:
1 2 |
>>>df.columns Index(['a', 'b', 'c'], dtype='object') |
8.删除缺失数据
1 |
df.dropna(axis=0, how='any') |
该函数我们在pandas处理缺失数据中讲到了。
9.替换数据
1 |
df.replace(to_replace=None, value=None) |
用value
替换to_replace
。
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>>>df.iloc[0, 0] = 1 >>>df a b c aa 1.000000 0.308830 -0.497176 bb 1.022262 -0.523748 0.577799 cc -0.002693 -1.431108 -0.845521 dd -1.293245 0.252396 -0.556003 >>>df.replace(1, 3) a b c aa 3.000000 0.308830 -0.497176 bb 1.022262 -0.523748 0.577799 cc -0.002693 -1.431108 -0.845521 dd -1.293245 0.252396 -0.556003 |
10.检查缺失值
1 |
pd.isnull(object) |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 |
>>>a = pd.Series([1, np.nan, 2]) >>>a 0 1.0 1 NaN 2 2.0 dtype: float64 >>>a.isnull() 0 False 1 True 2 False dtype: bool |
11.删除
1 |
df.drop('feature_variable_name', axis=1) |
drop()
函数可以删除数据,默认axis=0
。
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
>>>df a b c aa 1.000000 0.308830 -0.497176 bb 1.022262 -0.523748 0.577799 cc -0.002693 -1.431108 -0.845521 dd -1.293245 0.252396 -0.556003 >>>df.drop(['aa','cc']) a b c bb 1.022262 -0.523748 0.577799 dd -1.293245 0.252396 -0.556003 >>>df.drop(['a'], axis=1) b c aa 0.308830 -0.497176 bb -0.523748 0.577799 cc -1.431108 -0.845521 dd 0.252396 -0.556003 |
12.将对象转为浮点型
1 |
pd.to_numeric(df["feature_name"], errors='coerce') |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
>>>df1 = pd.DataFrame({'a':['1','2', '3'], 'b':[3, 4, 5]}) >>>df1 a b 0 1 3 1 2 4 2 3 5 >>>df1.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 3 entries, 0 to 2 Data columns (total 2 columns): a 3 non-null object b 3 non-null int64 dtypes: int64(1), object(1) memory usage: 128.0+ bytes >>>pd.tonumeric(df1['a']) 0 1 1 2 2 3 Name: a, dtype: int64 |
13.DataFrame转换为NumPy数组
1 |
df.as_matrix() # 等价于df.values |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
>>>df a b c aa 1.000000 0.308830 -0.497176 bb 1.022262 -0.523748 0.577799 cc -0.002693 -1.431108 -0.845521 dd -1.293245 0.252396 -0.556003 >>>df.as_matrix() array([[ 1. , 0.30883042, -0.49717617], [ 1.02226218, -0.52374782, 0.57779931], [-0.00269256, -1.43110775, -0.84552146], [-1.29324519, 0.25239584, -0.55600331]]) # 等价于.values >>>df.values array([[ 1. , 0.30883042, -0.49717617], [ 1.02226218, -0.52374782, 0.57779931], [-0.00269256, -1.43110775, -0.84552146], [-1.29324519, 0.25239584, -0.55600331]]) |
14.获取前n行
1 |
df.head(n) |
代码演示:
1 2 3 4 |
>>>df.head(2) a b c aa 1.000000 0.308830 -0.497176 bb 1.022262 -0.523748 0.577799 |
15.定位数据
1 |
df.loc[feature_name] |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 |
>>>df a b c aa 1.000000 0.308830 -0.497176 bb 1.022262 -0.523748 0.577799 cc -0.002693 -1.431108 -0.845521 dd -1.293245 0.252396 -0.556003 >>>df.loc['aa'] a 1.000000 b 0.308830 c -0.497176 Name: aa, dtype: float64 |
16.使用函数
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>>df.apply(lambda x: x*2) a b c aa 2.000000 0.617661 -0.994352 bb 2.044524 -1.047496 1.155599 cc -0.005385 -2.862216 -1.691043 dd -2.586490 0.504792 -1.112007 >>>def fun1(x): ... return x * 2 >>>df.apply(fun1) a b c aa 2.000000 0.617661 -0.994352 bb 2.044524 -1.047496 1.155599 cc -0.005385 -2.862216 -1.691043 dd -2.586490 0.504792 -1.112007 |
17.重命名列
代码演示:
1 2 3 4 5 6 |
>>>df.rename(columns={'a': 'name'}) name b c aa 1.000000 0.308830 -0.497176 bb 1.022262 -0.523748 0.577799 cc -0.002693 -1.431108 -0.845521 dd -1.293245 0.252396 -0.556003 |
18.获得唯一的值
代码演示:
1 2 3 4 5 6 7 8 9 10 |
>>>df = pd.DataFrame({'a': [1, 1, 2, 3], 'b': [4, 5, 6, 7]}) >>>df a b 0 1 4 1 1 5 2 2 6 3 3 7 >>>df['a'].unique() array([1, 2, 3], dtype=int64) |
19.获取特定的列
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>>df a b c aa 1.000000 0.308830 -0.497176 bb 1.022262 -0.523748 0.577799 cc -0.002693 -1.431108 -0.845521 dd -1.293245 0.252396 -0.556003 >>>df[['a', 'c']] a c aa 1.000000 -0.497176 bb 1.022262 0.577799 cc -0.002693 -0.845521 dd -1.293245 -0.556003 |
20.计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# dataframe中值的和 df.sum() # dataframe中的最低值 df.min() # 最高值 df.max() # 最低值的索引 df.idxmin() # 最高值的索引 df.idxmax() # dataframe的统计信息总结,比如中位数等 df.describe() # 平均值 df.mean() # 中位值 df.median() # 列之间的关系 df.corr() # 只获取一列的值 df["size"].median() |
21.排序
1 |
df.sort_values(ascending = False) |
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
>>>df a b c aa 1.000000 -0.488107 0.286412 bb 0.520300 0.779708 0.015205 cc -0.842330 1.987941 -0.696148 dd 0.164643 -0.137718 -0.838992 >>>df.sort_values(by='a', ascending=False) a b c aa 1.000000 -0.488107 0.286412 bb 0.520300 0.779708 0.015205 dd 0.164643 -0.137718 -0.838992 cc -0.842330 1.987941 -0.696148 |
22.布尔索引
代码演示:
1 2 3 4 5 6 7 8 9 10 11 12 |
>>>df a b c aa 1.000000 -0.488107 0.286412 bb 0.520300 0.779708 0.015205 cc -0.842330 1.987941 -0.696148 dd 0.164643 -0.137718 -0.838992 >>>df[df['a']>0] a b c aa 1.000000 -0.488107 0.286412 bb 0.520300 0.779708 0.015205 dd 0.164643 -0.137718 -0.838992 |
23.选择特定的值
代码演示:
1 2 3 4 5 6 7 8 |
>>>df a b c aa 1.000000 -0.488107 0.286412 bb 0.520300 0.779708 0.015205 dd 0.164643 -0.137718 -0.838992 >>>df['aa', 'c'] 0.2864121367846689 |
总结
pandas基本操作是很容易掌握的,但是一些高级的功能还是需要多多练习才能掌握。