栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

机器学习笔记 - python学习记录二 pandas常用命令

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

机器学习笔记 - python学习记录二 pandas常用命令

1、pandas

        pandas 是一个多功能且功能强大的数据科学库。 

2、读取数据
pd.read_csv("data.csv")
3、读取指定列
pd.read_csv("data.csv", usecols=["date", "price"])
4、读取并解析日期
pd.read_csv("data.csv", parse_dates=["date"])
5、读取时指定数据类型

        在读取时设置类别数据类型可以节省内存。

pd.read_csv("data.csv", dtype={"house_type": "category"})
6、读取时设置索引
pd.read_csv("data.csv", index_col="date")
7、设置读取的行数
pd.read_csv("data.csv", nrows=100)
8、读取时跳过行数
pd.read_csv("data.csv", skiprows=[1, 5])  # skips line 1 and 5
pd.read_csv("data.csv", skiprows=100)  # skips the first 100 lines
pd.read_csv("data.csv", skiprows=lambda x: x > 0 and np.random.rand() > 0.1) # skip 90% of the rows
9、指定NA值
pd.read_csv("data.csv", na_values=["?"])
10、设置布尔值
pd.read_csv("data.csv", true_values=["yes"], false_values=["no"])
11、一次读取多个文件后合并
import glob
import os

files = glob.glob("file_*.csv")

result = pd.concat([pd.read_csv(f) for f in files], ignore_index=True)
12、复制数据
df = pd.read_clipboard() 
13、从 PDF 文件中读取表格
from tabula import read_pdf
# Read pdf into list of DataFrame
df = read_pdf('test.pdf', pages='all')
14、快速可视化数据集
import pandas_profiling

df = pd.read_csv("data.csv")
profile = df.profile_report(title="Pandas Profiling Report")
profile.to_file(output_file="output.html")
15、按dtype过滤列
# 选择
df.select_dtypes(include="number")
df.select_dtypes(include=["category", "datetime"])

# 排除
df.select_dtypes(exclude="object")
16、推断数据类型
df.infer_objects().dtypes
17、向下转换数值类型
pd.to_numeric(df.numeric_col, downcast="integer") # smallest signed int dtype
pd.to_numeric(df.numeric_col, downcast="float")  # smallest float dtype
18、防止错误值并填充
# apply to whole data frame
df = df.apply(pd.to_numeric, errors="coerce")

# apply to specific columns
pd.to_numeric(df.numeric_column, errors="coerce")

# filling NA values with zero
pd.to_numeric(df.numeric_column, errors="coerce").fillna(0)
19、按列数据类型转换
df = df.astype(
    {
        "date": "datetime64[ns]",
        "price": "int",
        "is_weekend": "bool",
        "status": "category",
    }
)
20、重命名列
df = df.rename({"PRICE": "price", "Date (mm/dd/yyyy)": "date"}, axis=1)
21、添加后缀和前缀
df.add_prefix("pre_")
df.add_suffix("_suf")
22、从原列创建新列
# create new column of Fahrenheit values from Celcius
df.assign(temp_f=lambda x: x.temp_c * 9 / 5 + 32)
23、在特定位置插入列
random_col = np.random.randint(10, size=len(df))
df.insert(3, 'random_col', random_col) # inserts at third column
24、三元表达式
df["logic"] = np.where(df["price"] > 5, "high", "low")
25、删除列
df.drop('col1', axis=1, inplace=True)
df = df.drop(['col1','col2'], axis=1)
s = df.pop('col')
del df['col']
df.drop(df.columns[0], inplace=True)
26、修改列名
df.columns = df.columns.str.lower()
df.columns = df.columns.str.replace(' ', '_')
27、判断包含
df['name'].str.contains("John")

df['phone_num'].str.contains('...-...-....', regex=True)  # regex

df['email'].str.contains('gmail')
28、根据正则查找
pattern = '([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\.([A-Z]{2,4})'

df['email'].str.findall(pattern, flags=re.IGNORECASE)
29、检查缺失值并打印缺失百分比
def missing_vals(df):
    """prints out columns with perc of missing values"""
    missing = [
        (df.columns[idx], perc)
        for idx, perc in enumerate(df.isna().mean() * 100)
        if perc > 0
    ]

    if len(missing) == 0:
        return "no missing values"
        

    # sort desc by perc
    missing.sort(key=lambda x: x[1], reverse=True)

    print(f"There are a total of {len(missing)} variables with missing valuesn")

    for tup in missing:
        print(str.ljust(f"{tup[0]:<20} => {round(tup[1], 3)}%", 1))


missing_vals(df)
30、处理缺失值
# drop 
df.dropna(axis=0)
df.dropna(axis=1)

# impute
df.fillna(0)
df.fillna(method="ffill")
df.fillna(method='bfill')

# replace
df.replace( -999, np.nan)
df.replace("?", np.nan)

# interpolate
ts.interpolate() # time series
df.interpolate() # fill all consecutive values forward
df.interpolate(limit=1) # fill one consecutive value forward
df.interpolate(limit=1, limit_direction="backward")
df.interpolate(limit_direction="both")
31、从今天/之前获取 X 小时/天/周
# from today
date.today() + datetime.timedelta(hours=30)
date.today() + datetime.timedelta(days=30)
date.today() + datetime.timedelta(weeks=30)

# ago
date.today() - datetime.timedelta(days=365)
32、过滤两个日期
df[(df["Date"] > "2015-01-01") & (df["Date"] < "2017-01-01")]
33、按日/月/年过滤
# filter by single day
df[df["Date"].dt.strftime("%Y-%m-%d") == "2017-03-01"]

# filter by single month
df[df["Date"].dt.strftime("%m") == "12"]

# filter by single year
df[df["Date"].dt.strftime("%Y") == "2017"]
34、格式化数据格式
format_dict = {
    "Date": "{:%d/%m/%y}",
    "Open": "${:.2f}",
    "Close": "${:.2f}",
    "Volume": "{:,}",
}

df.style.format(format_dict)
35、设置数据颜色
(
    df.style.format(format_dict)
    .hide_index()
    .highlight_min(["Open"], color="red")
    .highlight_max(["Open"], color="green")
    .background_gradient(subset="Close", cmap="Greens")
    .bar('Volume', color='lightblue', align='zero')
    .set_caption('Tesla Stock Prices in 2017')
)
36、获取一列中最大最小项的id
df['col'].idxmin()
df['col'].idxmax()
37、对数据列应用函数
df.applymap(lambda x: np.log(x))
38、随机打乱数据
df.sample(frac=1, random_state=7).reset_index(drop=True)
39、时间序列的百分比变化
df['col_name'].pct_change()
40、分配等级
df['rank'] = df['column_to_rank'].rank()
41、检查内存占用
df.memory_usage().sum() / (1024**2) #converting to MB
42、将列的值分解为多行
df.explode("col_name").reset_index(drop=True)
43、将数量较小的类别转换为“其他”
subclass = df.MSSubClass
subclass.value_counts()
top_five = subclass.value_counts().nlargest(5).index
mssubclass_new = subclass.where(subclass.isin(top_five), other="Other")
mssubclass_new.value_counts()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025408.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号