python笔记

这篇保存一些pandas常用的命令,字符串获取的方法,以及字典列表的一些实用方法

Pandas

1.pandas读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pandas as pd
from io import StringIO
##读取csv
pd.read_csv('data/data.csv')
##传入字符串
data = ('col1,col2,col3\n'
'a,b,1\n'
'a,b,2\n'
'c,d,3')
pd.read_csv(StringIO(data))
##分隔符,表头以及列名
sep='\t',header=0/None ##0为第一行,None为无
pd.read_csv(data,names=['列1','列2'],header=0)

##指定索引列
pd.read_csv(data, index_col=False) # 不再使用首列作为索引
pd.read_csv(data, index_col=0) # 第几列是索引
pd.read_csv(data, index_col='年份') # 指定列名
pd.read_csv(data, index_col=['a','b']) # 多个索引

##dtype可以指定各数据列的数据类型
pd.read_csv(data, dtype=np.float64) # 所有数据均为此数据类型
pd.read_csv(data, dtype={'c1':np.float64, 'c2': str}) # 指定字段的类型
pd.read_csv(data, dtype=[datetime, datetime, str, float]) # 依次指定

2.pandas创建

1
2
3
4
5
6
7
8
9
10
11
12
13
##字典嵌套列表创建
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4']) ##index为行标签

##列表嵌套字典创建DataFrame对象
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)

## Series创建DataFrame对象
####Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

3.pandas列索引操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
##列索引
df['列名']
#将已经存在的数据列做相加运算
df['four']=df['one']+df['three']
##insert 方法
#注意是column参数
#数值1代表插入到columns列表的索引位置
df.insert(1,column='score',value=[91,90,75])
##列索引删除列
#使用del删除
del df['one']
print(df)
#使用pop方法删除
df.pop('two')

4.pandas行索引操作

1
2
3
4
5
6
7
8
9
10
11
12
##可以将行标签传递给 loc 函数,来选取数据
df.loc['b']
#############loc 允许接两个参数分别是行和列,参数之间需要使用“逗号”隔开,但该函数只能接收标签索引
##整数索引选取
df.iloc[2]
#############iloc 允许接受两个参数分别是行和列,参数之间使用“逗号”隔开,但该函数只能接收整数索引
##添加数据行
##使用append() 函数,可以将新的数据行添加到 DataFrame 中,该函数会在行末追加数据行
df = df.append(df2)
##删除数据行
##使用行索引标签,从 DataFrame 中删除某一行数据。如果索引标签存在重复,那么它们将被一起删除
df = df.drop(0)
名称 属性&方法描述
T 行和列转置。
axes 返回一个仅以行轴标签和列轴标签为成员的列表。
dtypes 返回每列数据的数据类型。
empty DataFrame中没有数据或者任意坐标轴的长度为0,则返回True。
ndim 轴的数量,也指数组的维数。
shape 返回一个元组,表示了 DataFrame 维度。
size DataFrame中的元素数量。
values 使用 numpy 数组表示 DataFrame 中的元素值。
head() 返回前 n 行数据。
tail() 返回后 n 行数据。
shift() 将行或列移动指定的步幅长度

String

1.通用类

  • replace(old, new [, max]),把 将字符串中的 old 替换成 new, max 为可选参数,若指定 max ,则替换 max 次
1
2
3
4
5
double_str = "my name is kele kele"
double_str.replace("kele", "xuebi")
'my name is xuebi xuebi'
double_str.replace("kele", "xuebi", 1)
'my name is xuebi xuebi'
  • split(str="", num=string.count(str)),以 str 为分隔符截取字符串,默认为所有的空字符,包括空格、换行\n、制表符\t等。若指定 num ,则截取出 num+1 个子字符串,返回包含所有字符串的列表。
1
2
3
4
5
6
7
8
# 用法一:不指定 num ,截取所有
double_str = "mynameiskelekelea"
double_str.split("e")
['mynam', 'isk', 'l', 'k', 'l', 'a']

# 用法二:指定 num ,截取 num 次
double_str.split("e", 1)
['mynam', 'iskelekelea']
  • splitlines([keepends]),按照行('', '', ')分隔,返回一个包含各行作为元素的列表,参数 keepends 默认为 False,不包含换行符,如果为 True,则保留换行符。
1
2
3
4
5
6
7
8
9
10
# 用法一:不指定 keepends,默认为 False
double_str = "my name\n
is ke\r
le \r\n"
double_str.splitlines()
['my name', 'is ke', 'le']

# 用法一:指定 keepends 为 True, 保留切割符
double_str.splitlines(True)
['my name\n', 'is ke\r', 'le\r\n']
  • find(str, beg=0, end=len(string)),检测 str 是否包含在字符串中,若指定 beg 和 end ,则在指定范围内检测,若包含则返回第一次出现的索引值,否则返回 -1。
1
2
3
4
5
6
7
8
double_str = "my name is kele"
double_str.find("h")
-1
double_str.find("e")
6
# 指定范围
double_str.find("i",0,5)
-1
  • rfind 与find类似,从右边开始找,返回最后一次出现的索引值

  • index(str, beg=0, end=len(string)),与 find() 函数类似,但如果 str 不在字符串中会报错

  • rindex与index类似,从右边找

  • count(str, beg= 0,end=len(string)),返回 str 在 string 中出现的次数,若指定 beg 或者 end 参数,则返回在指定范围内 str 出现的次数。

1
2
3
4
5
double_str = "my name is kele"
double_str.count("h")
0
# 指定范围
double_str.count("e", 0, 7)
  • lstrip([chars]),只处理字符串句首的空格或指定字符,其他位置忽略。
1
2
3
4
5
6
7
8
# 处理句首空格
double_str = " 句首 有两个空格"
double_str.lstrip()
'句首 有两个空格'
# 处理句首指定字符
double_str = "句首句首有一个空格"
double_str.lstrip("句首")
'有一个空格'
  • rstrip([chars]),处理字符串末尾的空格或指定字符,其他位置忽略.。

  • strip([chars]), 处理字符串两端的空格或指定字符,可视为 lstrip() 和 rstrip() 的效果叠加。

1
2
3
4
# 处理两端的指定字符
double_str = "你好有一个 空格你好"
double_str.strip("你好")
'有一个 空格'
  • center(width, fillchar),fillchar 为填充的字符,默认使用空格填充,返回指定宽度 width、原字符串居中、使用 fillchar 填充后的字符串。
1
2
3
# 指定填充字符 【*】
double_str.center(20, "*")
'***我想通过两侧填充来让自己变强***'
  • ljust,右侧填充

  • rjust,左侧填充

  • join(seq),以指定字符串作为拼接字符,将 seq 中所有的元素(必须是字符串类型),拼接为一个新的字符串。如果拼接对象不是字符会报错。

1
2
3
4
5
6
7
8
# 用法一:不指定拼接字符,默认使用空字符
seq_list =["我想", "合并", "自己"]
"".join(seq_list)
'我想合并自己'

# 用法二:指定拼接字符【***】
"***".join(seq_list)
'我想***合并***自己'

2.单词类

  • capitalize(),将字符串的首字母转换为大写。
  • title(),将字符串中所有单词的首字母转换为大写。
  • upper(),将字符串中的小写字母全部转换为大写。
  • lower(),将字符串中所有大写字母转换为小写。
  • swapcase(),将字符串中的大写字母转换为小写,小写字母转换为大写。
  • max(str),返回字符串 str 中最大的字母。
  • min(str),返回字符串 str 中最小的字母。

3.判断类

  • startswith(substr, beg=0,end=len(string)),判断字符串是否是以指定子字符串 substr 开头,是则返回 True,否则返回 False。若指定 beg 和 end 值,则在指定范围内判断。
1
2
3
double_str = "my name is kele"
double_str.startswith("my")
True
  • endswith(suffix, beg=0, end=len(string)),判断字符串是否以指定子字符串 suffix 结束,是则返回 True,否则返回 False。若指定 beg 和 end 值,则在指定范围内判断。
1
2
3
4
5
6
7
8
9
10
用法一:不指定范围
double_str = "my name is kele"
double_str.endswith("kele")
True
double_str.endswith("xuebi")
False

# 用法二:指定范围
double_str.endswith("kele", 0, 6)
False
  • isdigit(),判断字符串是否只包含数字,是则返回 True, 否则返回 False。

  • isalnum(),判断字符串是否至少有一个字符并且只包含字母、数字或字母和数字,是则返回 True,否则返回 False。

  • isalpha(),判断字符串是否至少有一个字符,并且全为字母,是则返回 True, 否则返回 False,中文也被视为字母字符

  • islower(),判断字符串是否至少包含一个字母,并且字母全为小写,是则返回 True,否则返回 False。

  • isupper(),判断字符串是否至少包含一个字母,并且字母全为大写,是则返回 True,否则返回 False。

  • istitle(),判断字符串中所有英文单词的首字母是全为大写,其他字母全为小写,是则返回 True,否则返回 False。

  • isnumeric(),判断字符串是否只包含数字,是则返回 True,否则返回 False。数字可以是: Unicode 数字,全角数字(双字节),罗马数字,汉字数字。

  • isdecimal(),判断字符串是否只包含十进制数字,是则返回 True,否则返回 False。

  • isspace(),判断字符串是否只包含空白字符,是则返回 True,否则返回 False。

4.编码类

  • encode(encoding='UTF-8',errors='strict'),以 encoding 指定的编码格式编码字符串,默认为utf-8,如果出错默认报一个ValueError 的异常,除非 errors 指定的是 ignore 或者 replace。
1
2
3
4
5
6
7
8
##utf8
double_str = "utf-8编码"
double_str.encode()
b'utf-8\xe7\xbc\x96\xe7\xa0\x81'
##gbk
double_str = "gbk编码"
double_str.encode(encoding="gbk")
b'gbk\xb1\xe0\xc2\xeb'
  • bytes.decode(encoding="utf-8", errors="strict"),处理使用指定编码格式编码后的字符串,其中 bytes可通过字符串编码 str.encode() 来获取。
1
2
3
4
5
6
7
8
9
double_str = "utf-8编码"
utf8_encode = double_str.encode()
utf8_encode.decode()
'utf-8编码'

double_str = "gbk编码"
gbk_encode = double_str.encode("gbk")
gbk_encode.decode("gbk")
'gbk编码'

Dictionary

之后再填

Reference article

Markdown语法

用Pandas读取CSV,看这篇就够了

python - 从字符串创建DataFrame

Pandas DataFrame入门教程(图解版)

一文搞定 Python 字符串操作(上)

一文搞定 Python 字符串操作(下)