1-将下面的字典创建为DataFrame
import pandas as pd
data = {
"name": ["Tom", "Jack", "Lily"],
"salary": [12000, 15000, 18000],
"education": ["本科", "硕士", "博士"]
}
df = pd.DataFrame(data)
2-提取含有字符串“Python”的行
df[df["content"].str.contains("Python", na=False)]
3-输出df的所有列名
df.columns
# 或
list(df.columns)
4-修改第二列列名为popularity
cols = df.columns.tolist()
cols[1] = "popularity"
df.columns = cols
5-统计grammer列中每种编程语言出现的次数
df["grammer"].value_counts()
6-计算salary最大值与最小值之差
df["salary"].max() - df["salary"].min()
7-将第一行与最后一行拼接
pd.concat([df.head(1), df.tail(1)], axis=0)
8-将第8行数据添加至末尾
df = pd.concat([df, df.iloc[[7]]], ignore_index=True)
9-查看每列的数据类型
df.dtypes
10-将createTime列设置为索引
df = df.set_index("createTime")
11-生成一个和df长度相同的随机数DataFrame
import numpy as np
rand_df = pd.DataFrame({"rand": np.random.rand(len(df))})
12-将上一题生成的DataFrame与df合并
df = pd.concat([df, rand_df], axis=1)
13-生成新的一列new为salary列减去随机数列
df["new"] = df["salary"] - df["rand"]
14-检查数据中是否含有任何缺失值
df.isna().values.any()
15-将salary列类型转换为浮点数
df["salary"] = df["salary"].astype(float)
16-计算salary大于10000的次数
(df["salary"] > 10000).sum()
17-查看每种学历出现的次数
df["education"].value_counts()
18-查看education列共有几种学历
df["education"].nunique()
19-提取salary与new列之和大于60000的最后3行
df[(df["salary"] + df["new"]) > 60000].tail(3)
20-使用绝对路径读取本地Excel数据
df = pd.read_excel(r"D:\data\test.xlsx")
21-查看数据前三行
df.head(3)
22-查看每列数据缺失值情况
df.isna().sum()
23-提取日期列含有空值的行
df[df["date"].isna()]
24-输出每列缺失值具体行数
df.isna().sum()
25-删除所有存在缺失值的行
df = df.dropna()
26-绘制收盘价的折线图
import matplotlib.pyplot as plt
df["close"].plot(figsize=(10,4))
plt.show()
27-同时绘制开盘价与收盘价
df[["open", "close"]].plot(figsize=(10,4))
plt.show()
28-绘制涨跌幅的直方图
df["pctChg"].hist(bins=20)
plt.show()
29-让直方图更细致
df["pctChg"].hist(bins=50)
plt.show()
30-以data的列名创建一个DataFrame
new_df = pd.DataFrame(columns=data.columns)
31-打印所有换手率不是数字的行
mask = pd.to_numeric(df["turn"], errors="coerce").isna()
df[mask]
32-打印所有换手率为--的行
df[df["turn"] == "--"]
33-重置data的行号
data = data.reset_index(drop=True)
34-删除所有换手率为非数字的行
mask = pd.to_numeric(df["turn"], errors="coerce").notna()
df = df[mask]
35-绘制换手率的密度曲线
pd.to_numeric(df["turn"], errors="coerce").dropna().plot(kind="kde")
plt.show()
36-计算前一天与后一天收盘价的差值
df["close_diff"] = df["close"].diff()
37-将第一列大于50的数字修改为“高”
first_col = df.columns[0]
df.loc[df[first_col] > 50, first_col] = "高"
38-计算第一列与第二列之间的欧式距离
import numpy as np
a = pd.to_numeric(df.iloc[:, 0], errors="coerce")
b = pd.to_numeric(df.iloc[:, 1], errors="coerce")
dist = np.sqrt(((a - b) ** 2).sum())
39-从CSV文件中读取指定数据
df = pd.read_csv("test.csv", usecols=["A", "B", "C"])
# 或
# df = pd.read_csv("test.csv", nrows=100)
40-从DataFrame提取数据
s = df["salary"]
sub = df[["salary", "education"]]
part = df.iloc[0:5, 0:3]
41-将数据取消使用科学计数法
pd.set_option("display.float_format", lambda x: "%.6f" % x)
42-将上一题的数据转换为百分数
pct = df["rate"].map(lambda x: f"{x:.2%}")
43-查找上一题数据中第3大值的行号
idx = df["rate"].nlargest(3).index[-1]
44-反转df的行
df_rev = df.iloc[::-1].reset_index(drop=True)
45-按照多列对数据进行合并
merged = pd.merge(df1, df2, on=["id", "date"], how="inner")
46-再次读取数据1并显示所有的列
pd.set_option("display.max_columns", None)
data1 = pd.read_csv("data1.csv")
data1.head()
47-查找secondType与thirdType值相等的行号
df.index[df["secondType"] == df["thirdType"]]
48-查找薪资大于平均薪资的第三个数据
tmp = df[df["salary"] > df["salary"].mean()]
third = tmp.iloc[2]
49-将上一题数据的salary列开根号
import numpy as np
tmp["salary_sqrt"] = np.sqrt(tmp["salary"])
50-将上一题数据的linestaion列按_拆分
tmp[["line", "station"]] = tmp["linestaion"].str.split("_", expand=True)
51-查看上一题数据中一共有多少列
tmp.shape[1]
52-提取industryField列以“数据”开头的行
df[df["industryField"].str.startswith("数据", na=False)]
53-按列制作数据透视表
pt = pd.pivot_table(df, index="district", values="salary", aggfunc="mean")
54-同时对salary、score两列进行计算
df[["salary", "score"]].apply(lambda x: x.mean())
# 或
# df[["salary", "score"]].agg(["mean", "max", "min"])
55-对不同列执行不同的计算
df.agg({
"salary": "mean",
"score": "max",
"age": "min"
})
56-计算并提取平均薪资最高的区
res = df.groupby("district")["salary"].mean().sort_values(ascending=False)
top_district = res.index[0]
top_value = res.iloc[0]