Pandas笔记_python总结笔记

Pandas笔记_python总结笔记创建数据随机数据创建一个Series,pandas可以生成一个默认的索引s=pd.Series([1,3,5,np.nan,6,8])通过numpy创建DataFrame,包含一个日期索引,以及标记的列dates=pd.date_range(‘20170101’,periods=6)df=pd.DataFrame(np.random.randn(6,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

创建数据

随机数据

创建一个Series,pandas可以生成一个默认的索引

s = pd.Series([1,3,5,np.nan,6,8])

通过numpy创建DataFrame,包含一个日期索引,以及标记的列

dates = pd.date_range('20170101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

df
Out[4]: 
                   A         B         C         D
2016-10-10  0.630275  1.081899 -1.594402 -2.571683
2016-10-11 -0.211379 -0.166089 -0.480015 -0.346706
2016-10-12 -0.416171 -0.640860  0.944614 -0.756651
2016-10-13  0.652248  0.186364  0.943509  0.053282
2016-10-14 -0.430867 -0.494919 -0.280717 -1.327491
2016-10-15  0.306519 -2.103769 -0.019832  0.035211

其中,np.random.randn可以返回一个随机数组

通过Dict创建

df2 = pd.DataFrame({ 'A' : 1.,
                     'B' : pd.Timestamp('20130102'),
                     'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                     'D' : np.array([3] * 4,dtype='int32'),
                     'E' : pd.Categorical(["test","train","test","train"]),
                     'F' : 'foo' })

Out[20]: 
     A          B    C  D      E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo

创建TimeStamp

有几个方法可以构造一个Timestamp对象

  • pd.Timestamp
import pandas as pd
from datetime import datetime as dt
p1=pd.Timestamp(2017,6,19)
p2=pd.Timestamp(dt(2017,6,19,hour=9,minute=13,second=45))
p3=pd.Timestamp("2017-6-19 9:13:45")

print("type of p1:",type(p1))
print(p1)
print("type of p2:",type(p2))
print(p2)
print("type of p3:",type(p3))
print(p3)


('type of p1:', <class 'pandas.tslib.Timestamp'>)
2017-06-19 00:00:00
('type of p2:', <class 'pandas.tslib.Timestamp'>)
2017-06-19 09:13:45
('type of p3:', <class 'pandas.tslib.Timestamp'>)
2017-06-19 09:13:45
  • to_datetime()
import pandas as pd
from datetime import datetime as dt

p4=pd.to_datetime("2017-6-19 9:13:45")
p5=pd.to_datetime(dt(2017,6,19,hour=9,minute=13,second=45))

print("type of p4:",type(p4))
print(p4)
print("type of p5:",type(p5))
print(p5)

('type of p4:', <class 'pandas.tslib.Timestamp'>)
2017-06-19 09:13:45
('type of p5:', <class 'pandas.tslib.Timestamp'>)
2017-06-19 09:13:45

读取数据

读取csv

df = pd.read_csv('x.csv')

读取压缩包

import zipfile

with zipfile.ZipFile('x.csv.zip', 'r') as z:
    f = z.open('x.csv')
    df = pd.read_csv(f, header=0)

查看数据

参考Basics section

查看数据类型

df2.dtypes

Out[30]: 
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object

查看head和tail

df.head(1)
df.tail(3)

查看index、column和数据

df.index
df.columns
df.values       

显示数据的快速统计

df.describe()
Out[19]: 
              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean   0.073711 -0.431125 -0.687758 -0.233103
std    0.843157  0.922818  0.779887  0.973118
min   -0.861849 -2.104569 -1.509059 -1.135632
25%   -0.611510 -0.600794 -1.368714 -1.076610
50%    0.022070 -0.228039 -0.767252 -0.386188
75%    0.658444  0.041933 -0.034326  0.461706
max    1.212112  0.567020  0.276232  1.071804

筛选数据

转置

df.T

遍历

traj_plot.py

df = df.set_index('gpstime')
for index, row in df.iterrows():
    locationF.write("p%s | %s | %s | %s | %s " % (str(cnt), index, str(row[0]), str(row[1]), str(row[2])) + '\n' )
import numpy as np
import pandas as pd

def _map(data, exp):                  
    for index, row in data.iterrows():   # 获取每行的index、row
        for col_name in data.columns:
            row[col_name] = exp(row[col_name]) # 把结果返回给data
    return data

def _1map(data, exp):
    _data = [[exp(row[col_name])               # 把结果转换成2级list
             for col_name in data.columns]
             for index, row in data.iterrows()
            ]
    return _data


if __name__ == "__main__":
    inp = [{
  
  'c1':10, 'c2':100}, {
  
  'c1':11,'c2':110}, {
  
  'c1':12,'c2':120}]
    df = pd.DataFrame(inp)
    temp = _map(df, lambda ele: ele+1 )
    print temp

    _temp = _1map(df, lambda ele: ele+1)
    res_data = pd.DataFrame(_temp)         # 对2级list转换成DataFrame
    print res_data

排序

通过列名来排序

#对于矩阵,axis=0表示行,1表示列
df.sort_index(axis=1, ascending=False)

通过某一列的数值排序

df.sort_values(by='B')
import pandas as pd

df = pd.read_csv('./query_result.csv', sep=',')
# 转为日期型
df['gpstime'] = pd.to_datetime(df['gpstime'])
# 按某一列排序
df.sort_values(['gpstime'])

选择

选择某一列

df['A']

选择某几行

df[0:3]
#也可以通过行的索引来选择,但是不能单独写某一行
df['20130102':'20130104']

选择几列转为矩阵

coords=dftest.as_matrix(columns=['longitude','latitude'])

过滤

pandas如何去掉、过滤数据集中的某些值或者某些行?

删除某列

方法一:直接del DF['column-name']

方法二:采用drop方法,有下面三种等价的表达式: 1. DF= DF.drop('column_name', 1); 2. DF.drop('column_name',axis=1, inplace=True) # inplace=true表示对原DF操作,否则将结果生成在一个新的DF中 3. DF.drop(DF.columns[ : ], axis=1,inplace=True) # Note: zero indexed 

pandas删除列

根据时间范围过滤

df = df.set_index('gpstime')
df['2018-04-22 01:00:00': '2018-04-22 05:00:00']

某一列按条件过滤

# python2适用
nightdf = nightdf[nightdf['speed']<1]
# python3中的
df06 = df04.loc[True - (float(df04.columns[-6]) > 0.0)]

groupby

利用pandas进行数据分组及可视化

pandas聚合和分组运算——GroupBy技术(1)

例1

from sklearn.datasets.samples_generator import make_blobs
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_blobs(n_samples=100, centers=3, n_features=2)
# dict中定义三个key,分别是坐标和label,再通过dict创建DataFrame
df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
colors = {
  
  0:'red', 1:'blue', 2:'green'}
fig, ax = pyplot.subplots()
#groupby可以通过传入需要分组的参数实现对数据的分组
grouped = df.groupby('label')
for key, group in grouped:
   group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])
pyplot.show()

例2

import pandas as pd
import matplotlib.pyplot as plt

# 把数据划分到自定义的区间中
def cla(n,lim):
    return'[%.f,%.f)'%(lim*(n//lim),lim*(n//lim)+lim) # map function

# 默认第一行是标题,从第二行开始是数据。sep是分隔符
df = pd.read_csv('/home/david/iaudience-plan-statistics.csv', sep=',')
# 设置某列的数据类型
df['precent'] = df['precent'].astype('float64')
# 对planid做group,group后对precent做sum
grouped = df['precent'].groupby(df['planid']).sum()

c = pd.DataFrame(grouped)
# 用c.precent或c['precent']都可以
addone = pd.Series([cla(s,1) for s in c.precent])
c['addone'] = addone
groups3 = c.groupby(['addone']).count()
groups3['precent'].plot('bar')
plt.show()

去重

https://blog.csdn.net/xinxing__8185/article/details/48022401

from pandas import Series, DataFrame 

data = DataFrame({'k': [1, 1, 2, 2]}) 

print data 

IsDuplicated = data.duplicated() 

print IsDuplicated  
print type(IsDuplicated) 

data = data.drop_duplicates() 
print data

DataFrame的duplicated方法返回一个布尔型Series,表示各行是否重复行。

而 drop_duplicates方法,它用于返回一个移除了重复行的DataFrame

这两个方法会判断全部列,你也可以指定部分列进行重复项判段。

例如,希望对名字为k2的列进行去重,

data.drop_duplicates([‘k2’])

应用

用kmeans聚类

import pandas as pd
import matplotlib.pyplot as plt
#读取文本数据到DataFrame中,将数据转换为matrix,保存在dataSet中
df = pd.read_table('d:/22.txt')
dataSet = df.as_matrix(columns=None)
# n_clusters=4,参数设置需要的分类这里设置成4类
kmeans = KMeans(n_clusters=4, random_state=0).fit(dataSet)
#center为各类的聚类中心,保存在df_center的DataFrame中给数据加上标签
center = kmeans.cluster_centers_
df_center = pd.DataFrame(center, columns=['x', 'y'])
#标注每个点的聚类结果
labels = kmeans.labels_
#将原始数据中的索引设置成得到的数据类别,根据索引提取各类数据并保存
df = pd.DataFrame(dataSet, index=labels, columns=['x', 'y'])
df1 = df[df.index==0]
df2 = df[df.index==1]
df3 = df[df.index==2]
df4 = df[df.index==3]
#绘图
plt.figure(figsize=(10,8), dpi=80)
axes = plt.subplot()
#s表示点大小,c表示color,marker表示点类型,DataFrame数据列引用参考博客其他文章
type1 = axes.scatter(df1.loc[:,['x']], df1.loc[:,['y']], s=50, c='red', marker='d')
type2 = axes.scatter(df2.loc[:,['x']], df2.loc[:,['y']], s=50, c='green', marker='*')
type3 = axes.scatter(df3.loc[:,['x']], df3.loc[:,['y']], s=50, c='brown', marker='p')
type4 = axes.scatter(df4.loc[:,['x']], df4.loc[:,['y']], s=50, c='black')
#显示聚类中心数据点
type_center = axes.scatter(df_center.loc[:,'x'], df_center.loc[:,'y'], s=40, c='blue')
plt.xlabel('x', fontsize=16)
plt.ylabel('y', fontsize=16)
axes.legend((type1, type2, type3, type4, type_center), ('0','1','2','3','center'), loc=1)
plt.show()

问题记录

Pycharm Pandas无法绘图

最近用了pycharm,感觉还不错,就是pandas中Series、DataFrame的plot()方法不显示图片就给我结束了,但是我在ipython里就能画图

以前的代码是这样的

import matplotlib.pyplot as plt
from pandas import DataFrame,Series

Series([4,5,7]).plot()

发现只要加个

plt.show() 就可以显示图像了了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/174611.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 字符串正则匹配leetcode_JAVA 正则表达式

    字符串正则匹配leetcode_JAVA 正则表达式原题链接给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa” p = “a”输出:false解释:”a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa” p = “a*”输出:true解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是

  • hostapd移植「建议收藏」

    hostapd移植「建议收藏」内核版本:linux-2.6.39开发板平台:at91sam9x35wifi模块:rt3070 先说一下wifi的两种常见的模式。AP模式:AccessPoint,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。AP和AP之间允许相互连接。Station模式:类似于无线终端,station本身并不接受无线的接入,它可以连接到AP

  • 第二代身份证 验证

    第二代身份证 验证
    今天,在盛大某网站注册的时候,身份证必填,但我又不想填真实身份证号码,于是随便编了串自认为合法的身份证号码,但是却马上被提示号码错误,由于响应速度极快,可以肯定不是联机校验正确性的,那也就是说第二代身份证除了大家都知道的几位表示生日和性别的规则以外,还有另外的自我校验规则。于是翻开页面源码查看,发现这段js没有被压缩,所以规则也很好懂。
    就在这里给大家科普下,不知道是不是火星了,呵呵。
    以下代码来自这里,版权归盛大。当然,你也可以在维基百科找到更详细的介绍和算法。

  • JSP程序设计课后习题答案

    JSP程序设计课后习题答案第一章JSP概述1-1JSP的全称是什么?JSP有什么优点?JSP与ASP、PHP的相同点是什么?JSP的全称是JavaServerPages。优点:跨平台、分离静态内容和动态内容、可重复使用的组件、沿用了JavaServlet的所有功能、具有预编译性。共同点:可以在页面中加入脚本代码来生成动态内容。1-2JSP中可重复使用的组件有哪些?JavaBean组件、JSP的标准标签和自定义标签。1-3什么是JSP的预编译特征?预编译是JSP的另一个重要的特性。JSP

  • 旅行清单图片_旅行打包清单

    旅行清单图片_旅行打包清单2019独角兽企业重金招聘Python工程师标准>>>…

    2022年10月27日
  • Navicat for MySQL注册码_navicat永久激活

    Navicat for MySQL注册码_navicat永久激活姓名(Name):(随便填)组织(Organization):(随便填)注册码(Serial):NAVJ-W56S-3YUU-MVHV–NavicatforSQLServerV10.0.10NAVD-3CG2-6KRN-IEPMNAVL-NIGY-6MYY-XWQENAVI-C3UU-AAGI-57FW-NavicatPremium注册码NAVJ-E6YF…

    2022年10月13日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号