Pandas基本操作

数据框的创建


pandas.DataFrame(data=None, index=None, columns=None)
参数 说明
data 数据, 用字典表示, 默认为空
index 索引, 方便快速找到某个数据, 可以用列表/元祖表示, 默认为空
columns 列, 可以用列表/元祖表示, 可以控制列的顺序, 更改列名, 默认为空
# 生成一个3行2列的数据框,列名分别为name, age; 索引分别为01,02,03
import pandas as pd
dataframe = pd.DataFrame(
    data = {
        'name': ['A', 'B', 'C'],
        'age': [12, 13, 15],
        'other': ['a', 'b', 'c']
    },
    index = ['01', '02', '03'],
    columns = ['name', 'age']
)
In[4]: dataframe
Out[4]: 
   name  age
01    A   12
02    B   13
03    C   15

数据框的访问


# 访问单列
In[5]: dataframe['name']
Out[5]: 
01    A
02    B
03    C
Name: name, dtype: object
-------------------------------------------------------------------------------
# 访问多列
In[6]: dataframe[['name', 'age']]
Out[6]: 
   name  age
01    A   12
02    B   13
03    C   15
--------------------------------------------------------------------------------
# 通过iloc访问单行多列
In[7]: dataframe.iloc[0, 0:2]
Out[7]: 
name     A
age     12
Name: 01, dtype: object
--------------------------------------------------------------------------------
# 通过loc访问多行单列
In[8]: ]dataframe.loc[['01', '02'], ['name']]
Out[8]: 
   name
01    A
02    B
---------------------------------------------------------------------------------
# 访问多行
In[9]: dataframe.iloc[0:3]
Out[9]: 
   name  age
01    A   12
02    B   13
03    C   15
----------------------------------------------------------------------------------
PS: iloc访问于loc访问的区别在于是否通过索引名访问. iloc是通过索引访问的, 访问第一行就是iloc[0], 访问第二行就是iloc[1], 以此类推; loc是通过索引名访问的, 列如 loc['01'] loc['02']

数据框的修改


添加另一个数据框

In[10]: dataframe = dataframe.append(dataframe, ignore_index)
In[11]: dataframe
Out[11]: 
   name  age
01    A   12
02    B   13
03    C   15
01    A   12
02    B   13
03    C   15

In[14]: dataframe = dataframe.append(dataframe, ignore_index=True)
In[15]: dataframe
Out[15]: 
   name  age
0     A   12
1     B   13
2     C   15
3     A   12
4     B   13
5     C   15
6     A   12
7     B   13
8     C   15
9     A   12
10    B   13
11    C   15

数据的添加修改删除

# 列的添加
In[18]: dataframe['NUM'] = [1]*dataframe.shape[0]
In[19]: dataframe
Out[19]: 
   name  age  NUM
0     A   12    1
1     B   13    1
2     C   15    1
3     A   12    1
4     B   13    1
5     C   15    1
6     A   12    1
7     B   13    1
8     C   15    1
9     A   12    1
10    B   13    1
11    C   15    1
--------------------------------------------------------------------------
# 行的添加
In[20]: dataframe.loc['1234'] = ['30'] * dataframe.shape[1]
In[21]; dataframe
Out[21]: 
     name age NUM
0       A  12   1
1       B  13   1
2       C  15   1
3       A  12   1
4       B  13   1
5       C  15   1
6       A  12   1
7       B  13   1
8       C  15   1
9       A  12   1
10      B  13   1
11      C  15   1
1234   30  30  30
---------------------------------------------------------------------------
# 修改某一个单元格的值
In[22]: dataframe.at['1234', 'age'] = '2222'
In[23]: dataframe
Out[23]: 
     name   age NUM
0       A    12   1
1       B    13   1
2       C    15   1
3       A    12   1
4       B    13   1
5       C    15   1
6       A    12   1
7       B    13   1
8       C    15   1
9       A    12   1
10      B    13   1
11      C    15   1
1234   30  2222  30
PS: 也可以用loc或者iloc
-----------------------------------------------------------------------------
# 列的删除
##  根据列名删除
dataframe = dataframe.drop('name', axis=1, inplace=False)
## 根据列索引删除列
dataframe = dataframe.drop(df.columns[[1, 2]], inplace=False, axis=1)
# 行的删除
dataframe = dataframe.drop(10, axis=0, inplace=False)

数据框的读取


读取excel

df = pd.read_excel(file_path, sheet_name=None, header=0, index_col=0, converters={'name': str}, na_values='')

读取csv

df  pd.read_csv(file_path, engine='python', encoding='utf-8')

数据框的输出


输出excel

df.to_excel(file_path, index=False, header=True, sheet_name='table1')

输出csv

df.to_csv(file_path)

数据框的运算

df['name1'] = df['name'] + df['name']
df['name1'] = df['name'] - df['name']
df['name1'] = df['name'] * df['name']
df['name1'] = df['name'] / df['name']

数据框的排序


df = df.sort_values(by=['name', 'age'], ascending=[True, False], inplace=False)
参数 说明
by 指定排序的那些列
ascending 是否为升序, 默认是True升序, False是降序
inplace 是否直接修改原数据, 默认是False不修改, 返回的是处理后的数据

数据框的重复处理


重复数据的查找

dup_df = df[df.duplicated(subset=['name'], keep='first')]
参数 说明
subset 根据那些列判断重复, 默认所有的列
keep 保留那个重复值, 默认是first(首个), last(最后), False都保留

PS: 单写df.duplicated()返回的是是一个序列数据类型是bool(布尔型),要想返回数据框,需写df[df.duplicated()]

重复数据的删除

df = df.drop_duplicates(subset, keep, inplace)
PS: 参数用法同上

数据框的空值处理


数据补齐

df = df.fillna(value)
PS: value 是填充的值 

空值的删除

df = df.dropna(axis=0, how='any')

参数 说明
axis 默认是0, 按行删除, 可以选1, 按列删除
how 默认是any, 一个为空就删除, 可选all, 所有为空删除

空格数据处理

df['name'] = df['name'].str.strip()

数据框的数据转化

dtypes对应的数据

pandas数据类型 dtype pthon数据类型 说明
object O str 字符型
int64 int64 int 整数型
float64 float64 float 浮点型
bool bool bool 布尔型
datetime64 <M8[ns] datetime64[ns] 日期时间类型
df.dtypes
# 查看数据框所有列的数据类型

数值转字符

df['name'] = df['name'].astype(str)

字符转数值

df['name'] = df['name'].astype(float)

字符转时间

df['time'] = pd.to_datetime(df['time'], format='%Y/%m/%d %H:%M:%S')

时间格式化

df['time'] = df['time'].dt.strftime('%Y-%m')

数据框的字段拆分

按照位置拆分

df['time'] = df['time'].slice(0, 3)

按照分隔符拆分

df['time'] = df['time'].str.split(pat=',', n=-1, expand=False)
参数 说明
pat 分隔符, 默认是空格''
n 分割为n+1列, -1代表返回所有列
expand 是否展开为数据框, 默认是False, 一般设置为True

时间属性的抽取

df.time_year = df.time.dt.year
df.time_month = df.time.dt.month
df.time_week = df.time.dt.weekday
df.time_day = df.time.dt.day
df.time_hour = df.time.dt.hour
df.time_minute = df.time.dt.minute
df.time_sec = df.time.dt.second

数据框的记录抽取


关键词抽取

fdf = df[df.name.str.contains(pat='str_key', na=False, case=True)]

空值抽取

fdf = df[df.time.isnull()]

数据范围抽取

fdf = df[df.age >= 20]

fdf = df[df.age.between(10, 20)]

时间范围抽取

dt1 = datetime(year=2021, month=1, day=1)
df2 = datetime(year=2021, month=2, day=2)
fdf = df[df.time >= dt1 & df.time <= dt2]

组合条件抽取

# 取反
fdf = df[~df.name.str.contains('str', na=False)]

# 与
fdf = df[(df.age > 20) & (df.age < 30) & df.name.str.contains('成', na='False')]

# 或
fdf = df[(df.age == 20) | (df.age == 23)]

数据框的数据合并


记录合并

fdf = pd.concat([df1, df2, df3])

字段匹配合并

fdf = pd.merge(df1, df2,  on=[], how='inner')
参数 说明
df1 左边的数据框
df2 右边的数据框
on 连接中使用的列名, left_on和right_on
how 连接的方法有 left, right, inner, outer

数据框的数据分组

df = pd.DataFrame(np.random.uniform(1, 20, (4, 1)))  # 随机产生一个4*1的数值在1到20之间的一个数据框
bins = [0, 5, 10, 20]  # 设置数值范围
table = ['0-5', '5-10', '10-20']  # 设置显示标签
df['out'] = pd.cut(df[0], bins, labels=table, right=False)  #right=True 区间为(],right=False区间为[)
print(df)
df1.png

数据框的数据分析

  1. 对比分析
  2. 统计分析

数据框的数据图标

数据框的样式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 读写 创建DataFramedf = pd.DataFrame(dict,index=[ ]) #从字典df = ...
    Koap阅读 1,301评论 0 0
  • Dataframe:基本概念及创建 Dataframe 数据结构 Dataframe是一个表格型的数据结构,“带有...
    42个艾尔阅读 583评论 0 1
  • Series对象 Index对象 s输出0 1.01 3.02 6.03 NaN4...
    WLWu阅读 238评论 0 0
  • pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的 #对数组处理#兼容各种数据库#支持...
    42个艾尔阅读 773评论 0 1
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,551评论 0 11