Python操作-合集(持续更新)

jupyterNotbook运行

1.读取csv文件,转化为dataframe

import pandas as pd
csv_file = "filename.csv"
csv_data = pd.read_csv(csv_file, low_memory = False)
csv_df = pd.DataFrame(csv_data)
csv_df

2.获取字符串中特定的内容

1. 获取两个字符之间的内容

def get_str_btw(s, f, b):
    par = s.partition(f)
    return (par[2].partition(b))[0][:]

例如:获取如下字串中的“THIS IS WHAT YOU WANT”:

string =123 THIS IS WHAT YOU WANT 456”
get_str_btw(string, "123 ", " 456")  #注意空格
#return “THIS IS WHAT YOU WANT”

2. 获取某字符后的int型

def get_int_after(s, f):
    S = s.upper()
    F = f.upper()
    par = S.partition(F)
    int_str = ""
    for c in par[2]:
        if c in ("-", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"):
            int_str += c
        else:
            if c == ":" or c == "=" or c == " ":
                if int_str == "":
                    continue
            break
    try:
        return int(int_str)
    except:
        print("Get Int After Fail")
        print(f, s)
        return "Parsing error"

例如: 获取如下字串中“Tput”的值:

string = "BLER0=7/100, BLER1=0/100, TRX=863 sf/s, Tput=29864840 bits/s, retx=8/100"
get_int_after(string, "Tput="#return 29864840

3. 获取某字符后的hex型

def get_hex_after(s, f):
    par = s.partition(f)
    hex = 0
    for c in par[2]:
        cap_c = c.capitalize()
        if ord(cap_c) in range(ord("0"), ord("9") + 1):
            hex *= 16
            hex += ord(cap_c) - ord("0")
        elif ord(cap_c) in range(ord("A"), ord("F") + 1):
            hex *= 16
            hex += ord(cap_c) - ord("A") + 10
        else:
            if c == ":" or c == "=" or c == " " or c =="x":
                if hex == 0:
                    continue
            break
    return hex

例如: 获取如下字串中“PSN”的值:

string = "Write to SIT: SIT(idx=0, pri=0), si_idx=[1232, 1246), PSN=0x8F71"
get_hex_after(string, "PSN="#return 0x8F71

3.字符串(str)与列表(list)相互转化

1. 字符串(str)转列表(list)

str1 = "12345"
list1 = list(str1)
print list1
#  输出['1', '2', '3', '4', '5']

str2 = "123 sjhid dhi"
list2 = str2.split() #or list2 = str2.split(" ")
print list2
 # 输出['123', 'sjhid', 'dhi']
 
str3 = "www.google.com"
list3 = str3.split(".")
print list3
 # 输出['www', 'google', 'com']

2. 列表(list)转字符串(str)

str4 = "".join(list3)
print str4
# 输出wwwgooglecom

str5 = ".".join(list3)
print str5
# 输出www.google.com

str6 = " ".join(list3)
print str6
#输出www google com

4.找到指定子字符串后面的数字

import re
text='中国2020年经济。。。'
reg=re.compile(r"(?<=中国)\d+")
match=reg.search(text)
print (match.group(0))
# 输出结果2020

5.将dataframe写入Excel或者csv

df.to_csv(文件路径) # 将dataframe输出到csv文件中 
df.to_excel(文件路径) # 将dataframe输出到excel文件中 
df.to_csv(r'C:\Users\qingfeng\Desktop\df.csv',encoding='gbk')

6.从列表中删除元素(三种方法)

Python中提供了三种list删除元素的方式

1.remove删除方法

list1=[22,33,44,55,66,77,88,99,12,44,67,48,22]
list1.remove(22) 
# 删除内容为22的元素,但是只默认删除第一个查询到的
# 如果想删除多个,则使用for循环可以做到
list1 
#输出[33, 44, 55, 66, 77, 88, 99, 12, 44, 67, 48, 22]

2.del删除方法

list1=[22,33,44,55,66,77,88,99,12,44,67,48,22]
del list1[2] # 删除索引为2的内容
list1
# 输出 [22, 33, 55, 66, 77, 88, 99, 12, 44, 67, 48, 22]

3.pop删除方法

list1=[22,33,44,55,66,77,88,99,12,44,67,48,22]
list1.pop(4) 
# 删除索引为4的内容,如果不写索引值,默认删除最后一个
list1
# 输出 [22, 33, 44, 55, 77, 88, 99, 12, 44, 67, 48, 22]

7. 判断对象是否可迭代

from collections import Iterable
isinstance('abc',Iterable)

8. 利用zip将列表(list)组成字典(dict)

keys = ['a', 'b', 'c']
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print (dictionary)
# 输出结果:{'a': 1, 'b': 2, 'c': 3}

9. for i in range(len( ))

可以参考这篇文章

10. Python中sum与列表推导式方法

可参考这篇文章

11. python数据处理——按列名选取dataframe的多列

data[['w','z']]  #选择表格中的'w'、'z'列

12. dataframe 删除全为某数的列\满足某条件的行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import pandas as pd
from pandas import DataFrame
d2 = DataFrame({'a': [1, 1,1,1],
 'b': [0,0, 0,0],
 'c': [1, 10, 11, 12],
 'd': [1, 14, 15, 16] })
d2
# 删除全为1的列
d3=d2.ix[:,~(d2==1).all()]
d3
# 删除包含0和1的列
d4=d2.ix[:,~((d2==1).all()|(d2==0).all())]
d4
# 删除df.d大于等于5且小于15的所有行
d6 = d2.drop(d2[(d2.d >= 5) & (d2.d < 15)].index)
d6
# 删除索引为d的列
d7 = d2.drop('d', axis=1)
d7
# 选取c列中包含数值1的行
d8=d2[d2['c'].isin([1])]
d8
#通过~取反,选取d2表中,c列内不包含数字1的行
d9=d2[~d2['c'].isin([1])]
d9
#删除/选取某行含有特定数值的列
cols=[x for i,x in enumerate(d2.columns) if d2.iat[0,i]==1]
#利用enumerate对row0进行遍历,将含有数字3的列放入cols中
print(cols)
d10=d2.drop(cols,axis=1) #利用drop方法将含有特定数值的列删除
d10
import pandas as pd
import numpy as np
 
df1 = pd.DataFrame(
    [
        [np.nan, 2, np.nan, 0],
        [3, 4, np.nan, 1],
        [np.nan, np.nan, np.nan, 5],
        [np.nan, 3, np.nan, 4]
    ],columns=list('ABCD'))
print('df1表格','\n',df1,'\n')
df2=df1.copy()
 
df1['A']=df1['A'].fillna('null') #将df中A列所有空值赋值为'null'
print('df1表格-空值赋为null','\n',df1,'\n')
df1=df1[~df1['A'].isin(['null'])]
print('通过取反,获取df1表格中,A列中不含null的行','\n',df1,'\n')
 
#删除某行空值所在列 
df2[0:1]=df2[0:1].fillna('null')
print('将df1中[0:1]行中的控制赋值为null,并命名为df2','\n',df2,'\n')

cols=[x for i,x in enumerate(df2.columns) if df2.iat[0,i]=='null']
print('获取df2中,值为null的列','\n',cols,'\n')
df2=df2.drop(cols,axis=1)
print('将df2中,满足col的列删去,并重新赋值df2','\n',df2)

在这里插入图片描述

13. 求列表的平均值

from numpy import *
a = [52,69,35,65,89,15,34]
b = mean(a)
print(b)  # 输出51.285714285714285

14. Python下pandas随机获取DataFrame中的数据

DataFrame.sample(n=None, frac=None, replace=False,  weights=None, random_state=None, axis=None)
n:表示你要随机抽取几行数据,比如你要抽取10行,n=10。不能与frac同时使用
frac:浮点型,可选。表示抽取数据的百分比,当不确定n的具体值的时候使用。不能与n同时使用
replace:布尔值,可选。原来的DataFrame是否被抽取的数据替换,默认为False.如果n取值大于原DataFrame的长度,replace为True,可返回结果。否则会因dataFrame长度不够而报错。
weights:权重,字符串或者数组格式,可选。通过设置不同的权重可以增加相应数据被选中的概率。
random_state:随机种子数
axis: 整数型或字符串,可选。可以是表示轴向的数据(0,1)或名称。当抽取数据的时候是从行中抽取数据,还是从列中抽取数据。0表示纵向坐标轴,1表示横向坐标轴。
import pandas as pd
from pandas import DataFrame
d2 = DataFrame({'a': [1, 1,1,1],
 'b': [0,0, 0,0],
 'c': [1, 10, 11, 12],
 'd': [1, 14, 15, 16] })
d2
d2.sample(n=1,axis=1)

在这里插入图片描述

15.pandas dataframe数据提取的方法

import numpy as np
from pandas import DataFrame
import pandas as pd


df=DataFrame(np.arange(12).reshape((3,4)),index=['one','two','thr'],columns=list('abcd'))

df['a']#取a列
df[['a','b']]#取a、b列

#ix可以用数字索引,也可以用index和column索引
df.ix[0]#取第0行
df.ix[0:1]#取第0行
df.ix['one':'two']#取one、two行
df.ix[0:2,0]#取第0、1行,第0列
df.ix[0:1,'a']#取第0行,a列
df.ix[0:2,'a':'c']#取第0、1行,abc列
df.ix['one':'two','a':'c']#取one、two行,abc列
df.ix[0:2,0:1]#取第0、1行,第0列
df.ix[0:2,0:2]#取第0、1行,第0、1列

#loc只能通过index和columns来取,不能用数字
df.loc['one','a']#one行,a列
df.loc['one':'two','a']#one到two行,a列
df.loc['one':'two','a':'c']#one到two行,a到c列
df.loc['one':'two',['a','c']]#one到two行,ac列

#iloc只能用数字索引,不能用索引名
df.iloc[0:2]#前2行
df.iloc[0]#第0行
df.iloc[0:2,0:2]#0、1行,0、1列
df.iloc[[0,2],[1,2,3]]#第0、2行,1、2、3列

#iat取某个单值,只能数字索引
df.iat[1,1]#第1行,1列
#at取某个单值,只能index和columns索引
df.at['one','a']#one行,a列

16.取dataframe的一列或一行

df['w']  #选择表格中的'w'列,使用类字典属性,返回的是Series类型
df.w    #选择表格中的'w'列,使用点属性,返回的是Series类型
df[['w']]  #选择表格中的'w'列,返回的是DataFrame属性
data[0:2]  #返回第1行到第2行的所有行,前闭后开,包括前不包括后
data[1:2]  #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,如果采用data[1]则报错
data.iloc[-1]   #选取DataFrame最后一行,返回的是Series
data.iloc[-1:]   #选取DataFrame最后一行,返回的是DataFrame

读取txt文档,写入嵌入列表

链接汇总:
beautifulsoup 4.2.0 中文文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
《Python数据挖掘方法及应用》一书代码及数据:
https://gitee.com/Py-R/PyDm/blob/master/code/PyDm_code.py
百度地图开放平台API调用:
http://lbsyun.baidu.com/index.php?title=uri/api/web
matplotlib官网-用法解释:
https://matplotlib.org/api/pyplot_summary.html
python读写excel等数据文件方法汇总:
https://zhuanlan.zhihu.com/p/104524969?utm_source=wechat_session&utm_medium=social&utm_oi=608238503788810240

参考链接:
https://blog.csdn.net/weekdawn/article/details/81389234
https://blog.csdn.net/csdnshutdown/article/details/83505286
https://blog.csdn.net/roytao2/article/details/53433373
https://blog.csdn.net/q357010621/article/details/78744759
https://jingyan.baidu.com/article/af9f5a2d78489b43140a45e4.html
https://blog.csdn.net/ialexanderi/article/details/78194790
https://blog.csdn.net/m0_37876745/article/details/85288155
https://blog.csdn.net/qxqxqzzz/article/details/88352576
https://blog.csdn.net/luocheng7430/article/details/80330566
https://blog.csdn.net/weixin_41789707/article/details/80930274
https://blog.csdn.net/d1240673769/article/details/79858434

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值