Pandas 数据处理(一) - DataFrame 与 Series
本文示例基于 Version 0.21.0
DataFrame和Series是pandas中最常见的2种数据结构。DataFrame可以理解为Excel中的一张表,Series可以理解为一张Excel表的一行或一列数据。
一、Series
Series可以理解为一维数组,它和一维数组的区别,在于Series具有索引。
1. 创建Series
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| money_series = pd.Series([200, 300, 10, 5], name="money") """ 0 200 1 300 2 10 3 5 Name: money, dtype: int64 """ money_series[0]
money_series = money_series.sort_values() """ 3 5 2 10 0 200 1 300 Name: money, dtype: int64 """ money_series[0]
money_series.iloc[0]
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| money_series = pd.Series([200, 300, 10, 5], index=['d', 'c', 'b', 'a'], name='money') """ d 200 c 300 b 10 a 5 Name: money, dtype: int64 """ money_series.index
money_series['a']
money_series = money_series.sort_index() """ a 5 b 10 c 300 d 200 Name: money, dtype: int64 """ money_series.iloc[-1]
|
2. 切片与取值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| money_series = pd.Series({'d': 200, 'c': 300, 'b': 10, 'a': 5}, name='money') """ a 200 b 300 c 10 d 5 Name: money, dtype: int64 """ money_series.loc['a']
money_series.loc['c':'a':-1] """ c 10 b 300 a 200 Name: money, dtype: int64 """ money_series.loc[['d', 'a']] """ d 5 a 200 """
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| money_series.iloc[0]
money_series.iloc[1:3] """ b 300 c 10 Name: money, dtype: int64 """ money_series.iloc[[3, 0]] """ d 5 a 200 Name: money, dtype: int64 """
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| money_series[money_series > 50] """ c 300 d 200 Name: money, dtype: int64 """ money_series[lambda x: x ** 2 > 50] """ b 10 c 300 d 200 Name: money, dtype: int64 """
|
二、DataFrame
1. 创建DataFrame
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
df = pd.DataFrame({'单价': [100, 200, 30], '数量': [3, 3, 10]}) """ 单价 数量 0 100 3 1 200 3 2 30 10 """
df = pd.DataFrame({'单价': [100, 200, 30], '数量': [3, 3, 10]}, index=['T001', 'T002', 'T003']) """ 单价 数量 T001 100 3 T002 200 3 T003 30 10 """
|
1 2 3 4 5 6 7 8 9 10 11 12
| price_series = pd.Series([100, 200, 30], index=['T001', 'T002', 'T005']) quantity_series = pd.Series([3, 3, 10, 2], index=['T001', 'T002', 'T003', 'T004']) df = pd.DataFrame({'单价': price_series, '数量': quantity_series})
""" 单价 数量 T001 100.0 3.0 T002 200.0 3.0 T003 NaN 10.0 T004 NaN 2.0 T005 30.0 NaN """
|
1 2 3
| df = pd.read_excel("path/demo.xlsx", sheetname=0)
df = pd.read_excel("path/demo.xlsx", sheetname='销售记录')
|
1 2 3 4 5 6
| 编号|日期|单价|数量 T001|2018-03-02 12:34:05|100|3 T002|2018-03-02 13:04:05|200|3 T003|2018-03-03 18:12:31|30|10 T004|2018-03-04 20:34:05|400|2 T005|2018-03-02 20:34:05|500|1
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| df = pd.read_csv('demo.dat', delimiter='|') """ 编号 日期 单价 数量 0 T001 2018-03-02 12:34:05 100 3 1 T002 2018-03-02 13:04:05 200 3 2 T003 2018-03-03 18:12:31 30 10 3 T004 2018-03-04 20:34:05 400 2 4 T005 2018-03-02 20:34:05 500 1 """
df = pd.read_csv('demo.dat', delimiter='|', index_col='编号') """ 日期 单价 数量 编号 T001 2018-03-02 12:34:05 100 3 T002 2018-03-02 13:04:05 200 3 T003 2018-03-03 18:12:31 30 10 T004 2018-03-04 20:34:05 400 2 T005 2018-03-02 20:34:05 500 1 """
|
2. 获取列与行
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 30 31 32 33 34 35
| df['日期'] """ 0 2018-03-02 12:34:05 1 2018-03-02 13:04:05 2 2018-03-03 18:12:31 3 2018-03-04 20:34:05 4 2018-03-02 20:34:05 Name: 日期, dtype: object """ df[['单价', '数量']] """ 单价 数量 0 100 3 1 200 3 2 30 10 3 400 2 4 500 1 """ df.loc['T001'] df.iloc[0] """ 日期 2018-03-02 12:34:05 单价 100 数量 3 Name: T001, dtype: object """ df.head(3) df.tail(3) """ 日期 单价 数量 编号 T003 2018-03-03 18:12:31 30 10 T004 2018-03-04 20:34:05 400 2 T005 2018-03-02 20:34:05 500 1 """
|
3. 修改
1 2 3 4 5 6 7 8 9 10 11 12 13
| df['单价'] *= 2
""" 日期 单价 数量 编号 T001 2018-03-02 12:34:05 200 3 T002 2018-03-02 13:04:05 400 3 T003 2018-03-03 18:12:31 60 10 T004 2018-03-04 20:34:05 800 2 T005 2018-03-02 20:34:05 1000 1 """
|
1 2 3 4 5 6 7 8 9 10
| df.index = '2018_' + df.index """ 日期 单价 数量 2018_T001 2018-03-02 12:34:05 200 3 2018_T002 2018-03-02 13:04:05 400 3 2018_T003 2018-03-03 18:12:31 60 10 2018_T004 2018-03-04 20:34:05 800 2 2018_T005 2018-03-02 20:34:05 1000 1 """
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| def change_price(x): if x['数量'] < 3: return x['单价'] + 10 return x['单价']
df['单价'] = df.apply(change_price, axis=1) """ 日期 单价 数量 2018_T001 2018-03-02 12:34:05 200 3 2018_T002 2018-03-02 13:04:05 400 3 2018_T003 2018-03-03 18:12:31 60 10 2018_T004 2018-03-04 20:34:05 810 2 2018_T005 2018-03-02 20:34:05 1010 1 """
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| df['运费'] = pd.Series({'2018_T001': 10, '2018_T005': 12}) """ 日期 单价 数量 运费 2018_T001 2018-03-02 12:34:05 200 3 10.0 2018_T002 2018-03-02 13:04:05 400 3 NaN 2018_T003 2018-03-03 18:12:31 60 10 NaN 2018_T004 2018-03-04 20:34:05 810 2 NaN 2018_T005 2018-03-02 20:34:05 1010 1 12.0 """
df.fillna(0) """ 日期 单价 数量 运费 2018_T001 2018-03-02 12:34:05 200 3 10.0 2018_T002 2018-03-02 13:04:05 400 3 0.0 2018_T003 2018-03-03 18:12:31 60 10 0.0 2018_T004 2018-03-04 20:34:05 810 2 0.0 2018_T005 2018-03-02 20:34:05 1010 1 12.0 """
|
4. 删除
1 2 3 4 5 6 7 8 9
| del df['日期'] """ 单价 数量 运费 2018_T001 200 3 10.0 2018_T002 400 3 NaN 2018_T003 60 10 NaN 2018_T004 810 2 NaN 2018_T005 1010 1 12.0 """
|
1 2 3 4 5 6 7 8 9 10 11
| new_columns = list(df.columns) new_columns.remove('运费') df = df[new_columns] """ 单价 数量 2018_T001 200 3 2018_T002 400 3 2018_T003 60 10 2018_T004 810 2 2018_T005 1010 1 """
|
附 推荐
上一篇 « TensorFlow入门(二) - mnist手写数字识别(模型保存加载)
下一篇 » Pandas 数据处理(二) - 筛选数据