数据框操作

1. 创建dataframe

  • 法一
1
dat = pd.DataFrame({'id':[1,2,3], 'string': ['a', 'b','c']})
  • 法二(若已有现成的list)
1
dat = pd.DataFrame([n_clusters_start, score], columns = ["分类数", "得分"])

例:

1
2
3
4
5
6
7
exclamationCount = lambda text: sum([1 for x in text if x == '!'])
EC = tweet.apply(lambda x:exclamationCount(x))
EC = EC.tolist()
questionMarkCount = lambda text: sum([1 for x in text if x == '?'])
QC = tweet.apply(lambda x:questionMarkCount(x))
QC = QC.tolist()
dat = pd.DataFrame({'EC':EC,'QC':QC})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
eachLetterCount = lambda text,letter: sum([1 for x in text.lower() if x == letter])

FList = []
pattern = 'abcdefghijklmnopqrstuvwxyz'
j=0
for i in pattern:
F = tweet.apply(lambda x:eachLetterCount(x,i))
F = F.tolist()
FList.append(F)

res = pd.DataFrame(FList)
res = res.transpose()

pattern = 'abcdefghijklmnopqrstuvwxyz'
name = []
for i in pattern:
name.append("freqOf " + i)
res.columns = name

结果

2. 数据框拼接

ignore_index = True, 重新分配索引

2.1 append
1
result = result1.append(result2, ignore_index = True) # 粘贴行
2.2 concat

pandas.concat — pandas 1.3.0 documentation (pydata.org)

1
2
result = pd.concat([result1, result2], ignore_index = True) # 默认axis = 0, 粘贴行 
RF_eval = pd.concat([RF_eval, eval_raw], axis = 1) # 粘贴列
2.3 merge

pandas.merge — pandas 1.3.0 documentation (pydata.org)

image-20210717004007434

3. 删掉列

1
RF_eval.drop(['raw'], axis = 1, inplace = True)

4. 删掉行

1
dat = dat.drop(0) # 删掉第一行

5. 提取行索引

1
2
index0 = res.index[res['label'] == 0].tolist()
X0 = X[index0] # X为矩阵

6. 提取特定的行

1
2
3
df[df['id']=1] # 提取id为1的行
df[(df['id']>=1) && (df['id']<=5)] # 提取id在[1,5]之间的行
df.loc[df['id']==1, 'age'] #提取id为1的行的人的年龄

7. DataFrame 中 axis 的概念

Pandas教程 | 数据处理三板斧——map、apply、applymap详解 - 知乎 (zhihu.com)

在 DataFrame 对象的大多数方法中,都会有 axis 这个参数,它控制了你指定的操作是沿着0轴还是1轴进行。axis=0代表操作对列columns进行,axis=1代表操作对行row进行,如下图所示。

image-20210717170137958

换言之,如果想增加一列(如把两个数据框横向拼接在一起(沿着axis=1的方向)),则选择axis=1,如果想增加一行(如对以上数据,对height求和(结果将显示在最下方,即”增加了一行”(沿着axis=0的方向))),则选择axis=0

假设现在需要对上述数据框中的数值列分别进行取对数求和的操作,这时可以用apply进行相应的操作,因为是对列进行操作,所以需要指定axis=0

1
2
3
4
5
# 沿着0轴求和
data[["height","weight","age"]].apply(np.sum, axis=0)

# 沿着0轴取对数
data[["height","weight","age"]].apply(np.log, axis=0)

image-20210717171536577