当前位置: 首页 > news >正文

【数据分析(二)】初探 Pandas

目录

  • 引言
  • 1. 基本数据结构
    • 1.1. Series 的初始化和简单操作
    • 1.2. DataFrame 的初始化和简单操作
      • 1.2.1. 初始化与持久化
      • 1.2.2. 读取查看
      • 1.2.3. 行操作
      • 1.2.4. 列操作
      • 1.2.5. 选中筛查
  • 2. 数据预处理
    • 2.0. 生成样例表
    • 2.1. 缺失值处理
    • 2.2. 类型转换和排序
    • 2.3. 统计分析
  • 3. 数据透视
    • 3.0. 生成样例表
    • 3.1. 生成透视表
  • 4. 数据重塑
    • 4.1. 层次化索引
      • 4.1.1. 双层索引的Series
      • 4.1.2. 双层索引的Dataframe
    • 4.2. 离散化处理
      • 4.2.1. 分组运算
      • 4.2.2. 分级标签
    • 4.3. 数据集合并

引言

  Pandas (Python Data Analysis Library) 是基于Numpy的一种用于数据分析的工具包,其中纳入了大量库和一些标准数据模型,提供了高效操作大型数据集所需的工具。

  以下对Pandas库函数的介绍中,已传入的参数为默认值,并且无返回值的函数不会以赋值形式演示。
  

1. 基本数据结构

1.1. Series 的初始化和简单操作

  Pandas中的Series,与Numpy中的arrayPython中的基本数据结构list类似,是一种能保存不同数据类型一维数组

s = pd.Series(data, index, dtype, name, copy)

  • data类数组array-like或者字典dict。类数组的索引(自然数序列)作为Series索引s.index,元素作为Seriess.values;字典的键作为s.index,值作为s.values
  • index类数组array-like重新指定s.index,若dataarray-like,则依序匹配;若datadict,则s.values空值np.nan
  • dtype数据类型或其字符串str重新指定Series类型s.dtype
  • name不可变对象hashable,包括字符串数字元组等。指定Series名称s.name,默认为None
import pandas as pd
import numpy as np# 默认行标签建表,并查看索引和值
s1 = pd.Series([-1, 0.7, False, np.nan])
'''
0 -1
1 0.7
2 False
3 NaN
dtype: object
'''
print(s1.values) # [-1 0.7 False nan]
print(s1.index) # RangeIndex(start=0, stop=4, step=1)# 设定行标签、表格名称和索引名称
s2 = pd.Series([-1, 0.7, False, np.nan], index=list('abcd'), name='demo')
s2.index.name = 'index'
'''
index
a -1
b 0.7
c False
d NaN
Name: demo, dtype: object
'''
print(s2.values) # [-1 0.7 False nan]
print(s2.index) # Index(['a', 'b', 'c', 'd'], dtype='object')# 查询值
print(s1[3]) # nan
print(s2['d'])# 切片:标签闭区间
print(s1[::2])
'''
0 -1
2 False
dtype: object
'''print(s2['a':'c'])
'''
a -1
b 0.7
c False
Name: demo, dtype: object
'''

  

1.2. DataFrame 的初始化和简单操作

  Pandas中的DataFrame,与R中的data.frame类似,是一种二维表格型数据结构,相当于Series的容器。
  

1.2.1. 初始化与持久化

import pandas as pd
import numpy as np# 1.字典建表
df = pd.DataFrame({'A': pd.Timestamp('20250110'), 'B': pd.Series(0, index=list(range(4))), 'C': np.array([1]*4), 'D': 2,'E': pd.Categorical(['test', 'train', 'test', 'train'])})
'''A  B  C  D      E
0 2025-01-10  0  1  2   test
1 2025-01-10  0  1  2  train
2 2025-01-10  0  1  2   test
3 2025-01-10  0  1  2  train
'''# 生成时序
date = pd.date_range('20250110', periods=5)
'''
DatetimeIndex(['2025-01-10', '2025-01-11', '2025-01-12', '2025-01-13','2025-01-14'],dtype='datetime64[ns]', freq='D')'''# 2.时序建表
df = pd.DataFrame(np.random.randn(5, 3), index=date, columns=list('xyz'))
'''x         y         z
2025-01-10 -0.274766 -0.593336  0.724735
2025-01-11  1.552149 -0.300292  0.061253
2025-01-12  0.411908 -0.470191 -0.893243
2025-01-13 -1.328169 -0.999390 -0.081419
2025-01-14  0.683950 -0.483677 -2.019955
'''# 保存表格:不额外添加索引
df.to_csv(r'E:\Pycharm_Python\course\demo.csv')

  

1.2.2. 读取查看

# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)# 查看头尾(默认5行)
print(df.head(2))
'''x         y         z
2025-01-10 -0.274766 -0.593336  0.724735
2025-01-11  1.552149 -0.300292  0.061253
'''
print(df.tail(1))
'''x         y         z
2025-01-14  0.68395 -0.483677 -2.019955
'''# 查看格式
print(df.dtypes)
'''
x    float64
y    float64
z    float64
dtype: object
'''# 查看行标签
print(df.index)
'''Index(['2025-01-10', '2025-01-11', '2025-01-12', '2025-01-13', '2025-01-14'], dtype='object')'''# 查看列标签
print(df.columns)
'''Index(['x', 'y', 'z'], dtype='object')'''# 查看数据
print(df.values)
'''
[[-0.27476573 -0.59333579  0.72473541][ 1.55214904 -0.30029235  0.06125304][ 0.41190756 -0.47019098 -0.89324306][-1.32816905 -0.99938983 -0.08141872][ 0.6839496  -0.48367661 -2.01995517]]
'''

  

1.2.3. 行操作

# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)# 单行选中
print(df.iloc[1])
'''
x    1.552149
y   -0.300292
z    0.061253
Name: 2025-01-11, dtype: float64
'''# 多行选中
# print(df.loc['20250113':'20250114'])
print(df.iloc[3:5])
'''x         y         z
2025-01-13 -1.328169 -0.999390 -0.081419
2025-01-14  0.683950 -0.483677 -2.019955
'''# 单行添加
df = df._append(pd.Series(dict(zip('xyz', np.random.randn(3))), name='2025-01-15'))
'''x         y         z
2025-01-10 -0.274766 -0.593336  0.724735
2025-01-11  1.552149 -0.300292  0.061253
2025-01-12  0.411908 -0.470191 -0.893243
2025-01-13 -1.328169 -0.999390 -0.081419
2025-01-14  0.683950 -0.483677 -2.019955
2025-01-15  1.205855  0.841471  0.843053
'''# 单行删除
df = df.drop(['2025-01-15'])
'''x         y         z
2025-01-10 -0.274766 -0.593336  0.724735
2025-01-11  1.552149 -0.300292  0.061253
2025-01-12  0.411908 -0.470191 -0.893243
2025-01-13 -1.328169 -0.999390 -0.081419
2025-01-14  0.683950 -0.483677 -2.019955
'''

  

1.2.4. 列操作

# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)# 单列选中
print(df['x'])
'''
2025-01-10   -0.274766
2025-01-11    1.552149
2025-01-12    0.411908
2025-01-13   -1.328169
2025-01-14    0.683950
Name: x, dtype: float64
'''# 多列选中
print(df[['x', 'z']])
'''x         z
2025-01-10 -0.274766  0.724735
2025-01-11  1.552149  0.061253
2025-01-12  0.411908 -0.893243
2025-01-13 -1.328169 -0.081419
2025-01-14  0.683950 -2.019955
'''# 单列添加
df['p'] = np.random.rand(5)
'''x         y         z         p
2025-01-10 -0.274766 -0.593336  0.724735  0.070785
2025-01-11  1.552149 -0.300292  0.061253  0.034027
2025-01-12  0.411908 -0.470191 -0.893243  0.446612
2025-01-13 -1.328169 -0.999390 -0.081419  0.545531
2025-01-14  0.683950 -0.483677 -2.019955  0.261958
'''# 单列删除
df = df.drop('p', axis=1)
print(df)
'''x         y         z
2025-01-10 -0.274766 -0.593336  0.724735
2025-01-11  1.552149 -0.300292  0.061253
2025-01-12  0.411908 -0.470191 -0.893243
2025-01-13 -1.328169 -0.999390 -0.081419
2025-01-14  0.683950 -0.483677 -2.019955
'''

  

1.2.5. 选中筛查

# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)# 单值选中
print(df.loc['2025-01-12', 'y'])
'''-0.47019098075848'''# 区域选中
# print(df.loc[['2025-01-12', '2025-01-13'], ['x', 'z']])
print(df[['x', 'z']][2:4])
'''x         z
2025-01-12  0.411908 -0.893243
2025-01-13 -1.328169 -0.081419
'''# 条件判断
print(df['x'] > 0)
'''
2025-01-10    False
2025-01-11     True
2025-01-12     True
2025-01-13    False
2025-01-14     True
Name: x, dtype: bool
'''# 条件筛选
print(df[(df['x'] > 0)&(df['z'] > 0)])
'''x         y         z
2025-01-11  1.552149 -0.300292  0.061253
'''# 区间条件筛选
print(df[df['x'] > 0][1:4])
'''x         y         z
2025-01-12  0.411908 -0.470191 -0.893243
2025-01-14  0.683950 -0.483677 -2.019955
'''

  

2. 数据预处理

2.0. 生成样例表

import pandas as pd
import numpy as np# 生成时序
date = pd.date_range('20250110', periods=5)# 建表
df = pd.DataFrame(np.random.randn(5, 3), index=date, columns=list('xyz'))# 生成随机布尔表
mask = np.random.randint(0, 2, df.shape, dtype='bool')# 随机生成空值
df[pd.DataFrame(mask, index=df.index, columns=df.columns)] = np.nan# 保存表格
df.to_csv(r'E:\Pycharm_Python\course\demo_nan.csv')

  

2.1. 缺失值处理

  • isnull():返回一个与原表尺寸相同布尔类型的表格,原表里的缺失值在其中对应位置上的值为True,其余为False
  • fillna(value, inplace=False):返回将原表的缺失值填充value后的表格,inplace=True将原表格替换为输出(下同)
  • replace(to_replace, value, inplace=False):返回原表的待替换值to_replace全部替换value后的表格,前两个参数是列表时表示批量替换
  • dropna(axis=0, inplace=False):返回将原表中含有缺失值的指定维度的记录删除后的表格
# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo_nan.csv', index_col=0)
'''x         y         z
2025-01-10  0.606495       NaN  0.456811
2025-01-11       NaN  0.743876       NaN
2025-01-12  0.024458  0.733735       NaN
2025-01-13  0.306332       NaN -0.586894
2025-01-14       NaN       NaN       NaN
'''# 判断缺失值
print(df.isnull())
'''x      y      z
2025-01-10  False   True  False
2025-01-11   True  False   True
2025-01-12  False  False   True
2025-01-13  False   True  False
2025-01-14   True   True   True
'''# 填充缺失值
print(df['x'].fillna(df['x'].mean()))
'''
2025-01-10    0.606495
2025-01-11    0.312428
2025-01-12    0.024458
2025-01-13    0.306332
2025-01-14    0.312428
Name: x, dtype: float64
'''print(df.fillna(0, inplace=True))
'''x         y         z
2025-01-10  0.606495  0.000000  0.456811
2025-01-11  0.000000  0.743876  0.000000
2025-01-12  0.024458  0.733735  0.000000
2025-01-13  0.306332  0.000000 -0.586894
2025-01-14  0.000000  0.000000  0.000000
'''# 替换缺失值
print(df.replace(np.nan, 0))# 删除缺失值
print(df.dropna())# 保存表格
df.to_csv(r'E:\Pycharm_Python\course\demo.csv')

  

2.2. 类型转换和排序

# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)# 类型转换
print(df.astype(bool))
'''x      y      z
2025-01-10   True  False   True
2025-01-11  False   True  False
2025-01-12   True   True  False
2025-01-13   True  False   True
2025-01-14  False  False  False
'''# 逆序排列
print(df.sort_values(by='x', ascending=False))
'''x         y         z
2025-01-10  0.606495  0.000000  0.456811
2025-01-13  0.306332  0.000000 -0.586894
2025-01-12  0.024458  0.733735  0.000000
2025-01-11  0.000000  0.743876  0.000000
2025-01-14  0.000000  0.000000  0.000000
'''# 有优先级的正序排列
print(df.sort_values(by=['z', 'y'], ascending=True))
'''x         y         z
2025-01-13  0.306332  0.000000 -0.586894
2025-01-14  0.000000  0.000000  0.000000
2025-01-12  0.024458  0.733735  0.000000
2025-01-11  0.000000  0.743876  0.000000
2025-01-10  0.606495  0.000000  0.456811
'''

  

2.3. 统计分析

# 描述性统计
print(df.describe())
'''x         y         z
count  5.000000  5.000000  5.000000
mean   0.187457  0.295522 -0.026017
std    0.267662  0.404676  0.370721
min    0.000000  0.000000 -0.586894
25%    0.000000  0.000000  0.000000
50%    0.024458  0.000000  0.000000
75%    0.306332  0.733735  0.000000
max    0.606495  0.743876  0.456811
'''# 最大值
print(df['x'].max())        # 0.606494812593188# 最小值
print(df['x'].min())        # 0.0# 均值
print(df['x'].mean())       # 0.18745690178195# 中值
print(df['x'].median())     # 0.0244579357029649# 方差
print(df['x'].var())        # 0.07164321143837143# 标准差
print(df['x'].std())        # 0.26766249538994336# 计数
print(df['z'].count())      # 5# 种类
print(df['z'].unique())     # [ 0.45681124  0.         -0.58689448]# 分类计数
print(df['z'].value_counts())
'''
z0.000000    30.456811    1
-0.586894    1
'''# 求和
print(df.sum())
'''
x    0.937285
y    1.477611
z   -0.130083
dtype: float64
'''# 相关系数
print(df.corr())
'''x         y         z
x  1.000000 -0.597883  0.306501
y -0.597883  1.000000  0.064061
z  0.306501  0.064061  1.000000
'''# 协方差
print(df.cov())
'''x         y         z
x  0.071643 -0.064761  0.030414
y -0.064761  0.163763  0.009611
z  0.030414  0.009611  0.137434
'''

  

3. 数据透视

3.0. 生成样例表

import pandas as pd
import numpy as np# 生成数据
hour = np.random.randint(0, 24, (1000, 1))
area = np.random.randint(0, 10, 1000)
displacement = np.random.randn(1000, 3)# 拼接表格
a = np.concatenate((hour, displacement), axis=1)
df = pd.DataFrame(a, index=area, columns=['hour', 'x', 'y', 'z'])
df.index.name = 'area'# 类型转换
df['hour'] = df['hour'].astype('int64')# 保存表格
df.to_csv(r'E:\Pycharm_Python\course\demo.csv')
'''hour         x         y         z
area                                    
9       18  1.453873 -0.452853  0.126672
5       20 -0.541874 -0.798552  0.209252
9       12  0.848762 -0.734806  0.124415
1       13  0.794053  1.838139 -0.268814
8        2 -0.115496  2.054565  0.860301
...    ...       ...       ...       ...
9       21 -0.212381  0.355993 -1.124492
1       20 -0.010173  0.408953 -0.275197
2       15  0.334253  0.231890  3.557654
0        3 -0.383228 -0.562431  2.418784
8       12 -1.004758 -0.539583  1.589166[1000 rows x 4 columns]
'''

  

3.1. 生成透视表

# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)# 设置透视范围
pd.set_option('display.max_columns', 4)
pd.set_option('display.max_rows', 10)# 生成透视表:将缺失值填充为0,并显示各列总和
pt = pd.pivot_table(df, index=['area', 'hour'], values=['x', 'y'], aggfunc=['sum', 'mean'], fill_value=0, margins=True)
'''sum                 mean          x          y         x         y
area hour                                          
0    0      4.372290   0.019988  1.093072  0.0049971     -5.463018   3.510755 -1.092604  0.7021512      0.429444  -2.022444  0.429444 -2.0224443      1.954055  -1.683926  0.488514 -0.4209814     -2.226930  -3.827011 -1.113465 -1.913506
...              ...        ...       ...       ...
9    20    -1.422801   0.262971 -0.237134  0.04382921    -2.720063   1.411410 -0.544013  0.28228222    -0.342656  -0.502878 -0.171328 -0.25143923    -1.024892  -0.385198 -0.170815 -0.064200
All       -24.847056  19.244009 -0.024847  0.019244[239 rows x 4 columns]
'''# 字典指定各标签的聚合函数
pt = pd.pivot_table(df, index=['area', 'hour'], aggfunc={'x': 'sum', 'y': 'mean'})
'''x         y
area hour                    
0    0     4.372290  0.0049971    -5.463018  0.7021512     0.429444 -2.0224443     1.954055 -0.4209814    -2.226930 -1.913506
...             ...       ...
9    19    1.744798 -0.40582120   -1.422801  0.04382921   -2.720063  0.28228222   -0.342656 -0.25143923   -1.024892 -0.064200[238 rows x 2 columns]
'''

  

4. 数据重塑

4.1. 层次化索引

4.1.1. 双层索引的Series

import pandas as pd
import numpy as np# 双层索引
index = pd.MultiIndex.from_arrays([list('aaabbccdd'), list(map(int, '123121212'))], names=('area', 'numbers'))
'''MultiIndex([('a', '1'),('a', '2'),('a', '3'),('b', '1'),('b', '2'),('c', '1'),('c', '2'),('d', '1'),('d', '2')],names=['area', 'numbers'])
'''# 初始化
s = pd.Series(np.random.randn(9), index=index)
print(s)
'''
area  numbers
a     1          0.4173282          0.1680573          1.252186
b     1         -1.8354902          0.951358
c     1         -1.9037622         -0.075067
d     1          0.7821232          0.355078
dtype: float64
'''# 单个选中
print(s['a', 1])    # 0.417328381875337# 单层选中
print(s['a'])
'''
numbers
1    0.417328
2    0.168057
3    1.252186
dtype: float64
'''# 单层切片
print(s['a':'b'])
'''
area  numbers
a     1          0.4173282          0.1680573          1.252186
b     1         -1.8354902          0.951358
dtype: float64
'''print(s[:, 2])
'''
area
a    0.168057
b    0.951358
c   -0.075067
d    0.355078
dtype: float64
'''

  

4.1.2. 双层索引的Dataframe

# 设置显示上限
pd.set_option('display.max_columns', 4)
pd.set_option('display.max_rows', 8)# 双层标签
index = pd.MultiIndex.from_arrays([list('aabbccdd'), list(map(int, '12121212'))], names=('area', 'numbers'))
columns = pd.MultiIndex.from_tuples([('t1', 'x'), ('t1', 'y'), ('t2', 'x'), ('t2', 'y')])
df = pd.DataFrame(np.random.randn(8, 4), index=index, columns=columns)
'''t1                  t2          x         y         x         y
area numbers                                        
a    1       -0.125867 -1.722040 -0.266579  0.9100842        0.060483  0.750894 -0.479338  0.608312
b    1        0.345995  1.470237  1.763323 -0.3364752       -1.977062  0.071204  0.000797 -0.323753
c    1        0.963804  0.186688  0.443276  0.6156502        1.729371 -0.775489  1.663172 -0.657688
d    1        0.376276  0.693671  0.982811 -0.3938402       -0.632945 -2.046240  0.865305  1.150940
'''# 单值选中
print(df.loc[('a', 1), ('t1', 'x')])    # -0.12586716795606423# 单层行选中
print(df.loc['a'])
'''t1                  t2          x         y         x         y
numbers                                        
1       -0.125867 -1.722040 -0.266579  0.910084
2        0.060483  0.750894 -0.479338  0.608312
'''# 单层列选中
print(df['t1'])
'''x         y
area numbers                    
a    1       -0.125867 -1.7220402        0.060483  0.750894
b    1        0.345995  1.4702372       -1.977062  0.071204
c    1        0.963804  0.1866882        1.729371 -0.775489
d    1        0.376276  0.6936712       -0.632945 -2.046240
'''# 索引交换
df = df.swaplevel('area', 'numbers')
'''t1                  t2          x         y         x         y
numbers area                                        
1       a    -0.125867 -1.722040 -0.266579  0.910084
2       a     0.060483  0.750894 -0.479338  0.608312
1       b     0.345995  1.470237  1.763323 -0.336475
2       b    -1.977062  0.071204  0.000797 -0.323753
1       c     0.963804  0.186688  0.443276  0.615650
2       c     1.729371 -0.775489  1.663172 -0.657688
1       d     0.376276  0.693671  0.982811 -0.393840
2       d    -0.632945 -2.046240  0.865305  1.150940
'''

  

4.2. 离散化处理

4.2.1. 分组运算

# 设置显示上限
pd.set_option('display.max_rows', 6)# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)
'''hour         x         y         z
area                                    
9       18  1.453873 -0.452853  0.126672
5       20 -0.541874 -0.798552  0.209252
9       12  0.848762 -0.734806  0.124415
...    ...       ...       ...       ...
2       15  0.334253  0.231890  3.557654
0        3 -0.383228 -0.562431  2.418784
8       12 -1.004758 -0.539583  1.589166[1000 rows x 4 columns]
'''# 对表格按索引和标签分组运算
print(df.groupby([df.index, df['hour']]).mean())
'''x         y         z
area hour                              
0    0     1.093072  0.004997 -0.1831011    -1.092604  0.702151 -0.5567972     0.429444 -2.022444 -0.346545
...             ...       ...       ...
9    21   -0.544013  0.282282 -0.19125022   -0.171328 -0.251439 -0.02212123   -0.170815 -0.064200 -0.244528[238 rows x 3 columns]
'''# 对某列按索引分组运算
print(df['x'].groupby(df.index).sum())
'''
area
0   -10.897082
1    -4.915652
2   -13.841750...    
7    -4.954806
8    -6.258694
9     2.828964
Name: x, Length: 10, dtype: float64
'''

  

4.2.2. 分级标签

# 设置显示上限
pd.set_option('display.max_rows', 6)# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)
'''hour         x         y         z
area                                    
9       18  1.453873 -0.452853  0.126672
5       20 -0.541874 -0.798552  0.209252
9       12  0.848762 -0.734806  0.124415
...    ...       ...       ...       ...
2       15  0.334253  0.231890  3.557654
0        3 -0.383228 -0.562431  2.418784
8       12 -1.004758 -0.539583  1.589166[1000 rows x 4 columns]
'''# 按数值区间分级
bins = [0, 0.1, 0.4, 0.8, 1.6, 3.2, 4.0]
labels = ['E', 'D', 'C', 'B', 'A', 'S']
df['rank_x'] = pd.cut(df['x'].abs(), bins, labels=labels)
'''hour         x         y         z rank_x
area                                           
9       18  1.453873 -0.452853  0.126672      B
5       20 -0.541874 -0.798552  0.209252      C
9       12  0.848762 -0.734806  0.124415      B
...    ...       ...       ...       ...    ...
2       15  0.334253  0.231890  3.557654      D
0        3 -0.383228 -0.562431  2.418784      D
8       12 -1.004758 -0.539583  1.589166      B[1000 rows x 5 columns]
'''# 按分位区间分级
bins = np.percentile(df['x'], [0, 25, 50, 70, 85, 95, 100])
labels = ['E', 'D', 'C', 'B', 'A', 'S']
df['rank_x'] = pd.cut(df['x'].abs(), bins, labels=labels)
print(df)
'''hour         x         y         z rank_x
area                                           
9       18  1.453873 -0.452853  0.126672      A
5       20 -0.541874 -0.798552  0.209252      B
9       12  0.848762 -0.734806  0.124415      B
...    ...       ...       ...       ...    ...
2       15  0.334253  0.231890  3.557654      C
0        3 -0.383228 -0.562431  2.418784      C
8       12 -1.004758 -0.539583  1.589166      A[1000 rows x 5 columns]
'''

  

4.3. 数据集合并

# 设置显示上限
pd.set_option('display.max_rows', 6)# 读取表格
df = pd.read_csv(r'E:\Pycharm_Python\course\demo.csv', index_col=0)
'''hour         x         y         z
area                                    
9       18  1.453873 -0.452853  0.126672
5       20 -0.541874 -0.798552  0.209252
9       12  0.848762 -0.734806  0.124415
...    ...       ...       ...       ...
2       15  0.334253  0.231890  3.557654
0        3 -0.383228 -0.562431  2.418784
8       12 -1.004758 -0.539583  1.589166[1000 rows x 4 columns]
'''# 单表添加和多表拼接
print(df.iloc[:3]._append(df.iloc[3:6]))
print(pd.concat([df.iloc[:2], df.iloc[2:4], df.iloc[4:6]], axis=0))
'''hour         x         y         z
area                                    
9       18  1.453873 -0.452853  0.126672
5       20 -0.541874 -0.798552  0.209252
9       12  0.848762 -0.734806  0.124415
1       13  0.794053  1.838139 -0.268814
8        2 -0.115496  2.054565  0.860301
9        9  1.235167  1.030952 -0.517618
'''# 合并
'''样表'''
df1 = df.iloc[2:5][['x', 'y']]
'''hour         x         y
area                          
9       12  0.848762 -0.734806
1       13  0.794053  1.838139
8        2 -0.115496  2.054565
'''df2 = df.iloc[2:5][['x', 'z']].sample(frac=1)
'''hour         x         z
area                          
8        2 -0.115496  0.860301
1       13  0.794053 -0.268814
9       12  0.848762  0.124415
'''print(pd.merge(df1, df2, on='area'))
'''x_x         y       x_y         z
area                                        
9     0.848762 -0.734806  0.848762  0.124415
1     0.794053  1.838139  0.794053 -0.268814
8    -0.115496  2.054565 -0.115496  0.860301
'''

相关文章:

【数据分析(二)】初探 Pandas

目录 引言1. 基本数据结构1.1. Series 的初始化和简单操作1.2. DataFrame 的初始化和简单操作1.2.1. 初始化与持久化1.2.2. 读取查看1.2.3. 行操作1.2.4. 列操作1.2.5. 选中筛查 2. 数据预处理2.0. 生成样例表2.1. 缺失值处理2.2. 类型转换和排序2.3. 统计分析 3. 数据透视3.0.…...

大数据与AI驱动的商业查询平台:企业市场拓展的变革引擎​

在竞争白热化的商业环境里,企业对准确市场信息的高效获取能力,直接关系到业务拓展的成败。商业查询平台借助大数据和人工智能技术,为企业提供精准客户筛选、市场拓展分析以及风险评估服务,正逐渐成为企业市场开拓的得力助手。本文…...

k8s namespace绑定节点

k8s namespace绑定节点 1. apiserver 启用准入控制 PodNodeSelector2. namespace 添加注解 scheduler.alpha.kubernetes.io/node-selector3. label node 1. apiserver 启用准入控制 PodNodeSelector vim /etc/kubernetes/manifests/kube-apiserver.yaml spec:containers:- co…...

ChatGPT被曝存在爬虫漏洞,OpenAI未公开承认

OpenAI的ChatGPT爬虫似乎能够对任意网站发起分布式拒绝服务(DDoS)攻击,而OpenAI尚未承认这一漏洞。 本月,德国安全研究员Benjamin Flesch通过微软的GitHub分享了一篇文章,解释了如何通过向ChatGPT API发送单个HTTP请求…...

2024微短剧行业生态洞察报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p39072 本报告合集洞察从多个维度全面解读微短剧行业。在行业发展层面,市场规模与用户规模双增长,创造大量高收入就业岗位并带动产业链升级。内容创作上,精品化、品牌化趋势凸显,题材走…...

【JavaSE】(8) String 类

一、String 类常用方法 1、构造方法 常用的这4种构造方法:直接法,或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中,String 类的字符串实际存储在 char 数组中: String 类也重写了 toString 方法,所以可以直…...

算法竞赛之差分进阶——等差数列差分 python

目录 前置知识进入正题实战演练 前置知识 给定区间 [ l, r ],让我们把数组中的[ l, r ] 区间中的每一个数加上c,即 a[ l ] c , a[ l 1 ] c , a[ l 2] c , a[ r ] c; 怎么做?很简单,差分一下即可 还不会的小伙伴点此进入学习 进入正题 …...

细说STM32F407单片机电源低功耗StopMode模式及应用示例

目录 一、停止模式基础知识 1、进入停止模式 2、停止模式的状态 3、退出停止模式 4、SysTick定时器的影响 二、停止模式应用示例 1、示例功能和CubeMX项目配置 (1)时钟 (2)RTC (3)ADC1 &#xf…...

LeetCode hot 力扣热题100 二叉树的中序遍历(非递归)

以下是代码中每行的详细注释以及整体思路&#xff1a; class Solution { public:vector<int> inorderTraversal(TreeNode* root) {// 定义存储结果的向量&#xff0c;用于存储中序遍历结果vector<int> result;// 定义一个栈&#xff0c;存储节点和访问状态。pair的…...

Flink底层架构与运行流程

这张图展示了Flink程序的架构和运行流程。 主要组件及功能&#xff1a; Flink Program&#xff08;Flink程序&#xff09;&#xff1a; 包含Program code&#xff08;程序代码&#xff09;&#xff0c;这是用户编写的业务逻辑代码。经过Optimizer / Graph Builder&#xff08…...

人工智能之深度学习_[4]-神经网络入门

文章目录 神经网络基础1 神经网络1.1 神经网络概念1.1.1 什么是神经网络1.1.2 如何构建神经网络1.1.3 神经网络内部状态值和激活值 1.2 激活函数1.2.1 网络非线性因素理解1.2.2 常见激活函数1.2.2.1 Sigmoid 激活函数1.2.2.2 Tanh 激活函数1.2.2.3 ReLU 激活函数1.2.2.4 SoftMa…...

ASP.NET Blazor部署方式有哪些?

今天我们来说说Blazor的三种部署方式&#xff0c;如果大家还不了解Blazor&#xff0c;那么我先简单介绍下Blazor Blazor 是一种 .NET 前端 Web 框架&#xff0c;在单个编程模型中同时支持服务器端呈现和客户端交互性&#xff1a; ● 使用 C# 创建丰富的交互式 UI。 ● 共享使用…...

Cyber Security 101-Security Solutions-Firewall Fundamentals(防火墙基础)

了解防火墙并亲身体验 Windows 和 Linux 内置防火墙。 任务1&#xff1a;防火墙的用途是什么 我们看到商场、银行、 餐馆和房屋。这些警卫被安置在 这些区域用于检查进出人员。这 维护此检查的目的是确保没有人在没有 被允许。这个警卫充当了他所在区域和访客之间的一堵墙。 …...

本地仓库管理之当前分支内的操作

以刚搭建好的git仓库为例&#xff0c;刚搭建完的仓库只有master分支&#xff0c;使用git branch查看当前的分支情况。 elfubuntu:~/work/example/hello$ git branch *所在分支为当前分支&#xff0c;即master分支 当前分支进行源码修改时简单流程图如下&#xff1a; 在当前分…...

【Unity3D】3D物体摆放、场景优化案例Demo

目录 PlaceManager.cs(放置管理类) Ground.cs(地板类) 和 GroundData.cs(地板数据类) 额外知识点说明 1、MeshFilter和MeshRenderer的Bounds区别 2、Gizmos 绘制一个平行于斜面的立方体 通过网盘分享的文件&#xff1a;PlaceGameDemo2.unitypackage 链接: https://pan.baid…...

ORACLE 12C开启EM EXPRESS过程

1 首先启动监听和关闭ORACLE/LINUX防火墙&#xff08;这一步略过&#xff09; lsnrctl start 2 然后查看http和https端口 select dbms_xdb_config.gethttpsport() from dual; select dbms_xdb_config.gethttpport() from dual; 3 设置em端口 exec dbms_xdb_config.setHTTPSPo…...

JavaScript学习笔记(1)

html 完成了架子&#xff0c; css 做了美化&#xff0c;但是网页是死的&#xff0c;我们需要给他注入灵魂&#xff0c;所以接下来我们需要学习 JavaScript&#xff0c;这门语言会让我们的页面能够和用户进行交互。 一、引入方式 1.内部脚本 将 JS 代码定义在 HTML 页面中 Jav…...

【PCL】Segmentation 模块—— 欧几里得聚类提取(Euclidean Cluster Extraction)

1、简介 PCL 的 Euclidean Cluster Extraction&#xff08;欧几里得聚类提取&#xff09; 是一种基于欧几里得距离的点云聚类算法。它的目标是将点云数据分割成多个独立的簇&#xff08;clusters&#xff09;&#xff0c;每个簇代表一个独立的物体或结构。该算法通过计算点与点…...

CMake技术细节:解决未定义,提供参数

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

BUUCTF_Web(October 2019 Twice SQL injection)

October 2019 Twice SQL injection 知识点&#xff1a; 二次注入&#xff1a; 当用户提交的恶意数据被存入数据库后&#xff0c;应用程序再把它读取出来用于生成新的SQL语句时&#xff0c;如果没有相应的安全措施&#xff0c;是有可能发生SQL注入的&#xff0c;这种注入就叫…...

CentOS 下载软件时报Error: Failed to synchronize cache for repo ‘AppStream‘解决方法

下载软件时出现以下问题 直接把CentOS-AppStream.repo改个名字就行 cd /etc/yum.repos.d/ mv CentOS-AppStream.repo CentOS-AppStream.repo.bak就可以了 解决思路 把AI问遍&#xff0c;无人会&#xff0c;解决法 想要下载软件通通失败了&#xff0c;解决方法当然是问AI&am…...

LeetCode 2661. First Completely Painted Row or Column

&#x1f517; https://leetcode.com/problems/first-completely-painted-row-or-column 题目 给一个 m*n 的二维数组&#xff0c;给一个 arr 的一纬数组元素由 [1, m * n] 组成遍历 arr&#xff0c;对二维数组中对应的元素进行染色返回执行到 arr 的第几个 index 的时候&…...

git的安装

目录 下载 安装 下载 前往官网下载安装包Git 点击dowmload选择适合自己的版本 安装 next 全选 是否修改库名&#xff0c;默认master 使用默认的 使用默认的 配置实验选项&#xff08;新功能&#xff0c;可以不选&#xff09; 不点 最后安装在d盘&#xff0c;programfile…...

C#性能优化技巧:利用Lazy<T>实现集合元素的延迟加载

一、C#中的Lazy C#中的Lazy<T>是一个泛型类&#xff0c;它实现了延迟加载&#xff08;Lazy Initialization&#xff09;的功能。延迟加载是指对象的创建被推迟&#xff0c;直到第一次被使用时才进行实例化。这对于大型或资源密集型对象的性能优化非常有用&#xff0c;因…...

Jenkins-基于Role的鉴权机制

jenkins自带了一些全局性的安全配置。 但无法通过job等相对细粒度的来控制使用者的权限。但它可以借助相关的插件实现细颗粒的权限控制。 插件&#xff1a; Role-based Authorization Strategy 需要在configure global security中配置授权策略如下&#xff1a; 保存后&#x…...

Python 并发编程的终极武器:使用 `multiprocessing` 模块征服计算密集型任务

Python 并发编程的终极武器:使用 multiprocessing 模块征服计算密集型任务 在Python中,由于全局解释器锁(GIL)的存在,多线程在处理CPU密集型任务时并不能真正实现并行,而是以交替执行的方式模拟并发,效率提升有限。为了充分利用多核CPU的优势,我们需要使用多进程。mul…...

vscode如何选用不同的python的解释器

在 VS Code 中设置 Python 的运行环境需要以下几个步骤&#xff0c;具体配置取决于你的开发环境和需求&#xff1a; 1. 安装必要工具 安装 Python&#xff1a; 确保已在系统中安装 Python&#xff08;推荐通过 Python 官方网站 安装&#xff09;。安装 VS Code 和 Python 扩展…...

MyBatis 注解开发详解

MyBatis 注解开发详解 MyBatis 支持使用注解来进行数据库操作。注解方式将 SQL 语句直接写在 Java 接口中&#xff0c;通过注解来完成 CRUD&#xff08;增删改查&#xff09;操作&#xff0c;省去了使用 XML 配置的繁琐步骤。这种方式适合简单项目或快速原型开发&#xff0c;因…...

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey &#x1f3e0; 第N个泰波那契数模型 &#x1f4cc; 题目解析 第N个泰波那契数 题目要求的是泰波那契数&#xff0c;并非斐波那契数。 &…...

【EdgeAI实战】(1)STM32 边缘 AI 生态系统

【EdgeAI实战】&#xff08;1&#xff09;STM32 边缘 AI 生态系统 【EdgeAI实战】&#xff08;1&#xff09;STM32 边缘 AI 生态系统 1. STM32 边缘人工智能1.1 X-CUBE-AI 扩展包1.2 STM32 AI Model Zoo1.3 ST AIoT Craft 2. STM32N6 AI 生态系统 (STM32N6-AI)2.1 STM32N6 AI 产…...

【陕西省乡镇界】面图层shp格式arcgis数据乡镇名称和编码2020年wgs84坐标无偏移内容测评

标题中的“陕西省乡镇界面图层shp格式arcgis数据乡镇名称和编码2020年wgs84坐标无偏移.zip”表明这是一个地理信息系统&#xff08;GIS&#xff09;的数据集&#xff0c;专为陕西省的乡镇区域设计。该数据集以Shapefile&#xff08;shp&#xff09;格式提供&#xff0c;是GIS领…...

Fabric区块链网络搭建:保姆级图文详解

目录 前言1、项目环境部署1.1 基础开发环境1.2 网络部署 2、后台环境2.1、环境配置2.2、运行springboot项目 3、PC端3.1、安装依赖3.2、修改区块链网络连接地址3.3、启动项目 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加…...

HTML 表单和输入标签详解

HTML 表单是网页与用户交互的重要工具&#xff0c;它允许用户输入数据并将其提交到服务器。表单在网页中的应用非常广泛&#xff0c;例如登录、注册、搜索、评论等功能都离不开表单。本文将详细介绍 HTML 表单及其相关标签的使用方法&#xff0c;帮助你全面掌握表单的设计与实现…...

sql实战解析-sum()over(partition by xx order by xx)

该窗口函数功能 sum( c )over( partition by a order by b) 按照一定规则汇总c的值&#xff0c;具体规则为以a分组&#xff0c;每组内按照b进行排序&#xff0c;汇总第一行至当前行的c的加和值。 从简单开始一步一步讲&#xff0c; 1、sum( )over( ) 对所有行进行求和 2、sum(…...

Vue平台开发三——项目管理页面

前言 对于多个项目的使用&#xff0c;可能需要进行项目切换管理&#xff0c;所以这里创建一个项目管理页面&#xff0c;登录成功后跳转这个页面&#xff0c;进行选择项目&#xff0c;再进入Home页面展示对应项目的内容。 一、实现效果图预览 二、页面内容 功能1、项目列表展…...

JDBC实验测试

一、语言和环境 实现语言&#xff1a;Java。 环境要求&#xff1a;IDEA2023.3、JDK 17 、MySQL8.0、Navicat 16 for MySQL。 二、技术要求 该系统采用 SWING 技术配合 JDBC 使用 JAVA 编程语言完成桌面应用开发。 三、功能要求 某电商公司为了方便客服查看用户的订单信…...

使用 vllm 部署 MiniCPM-o 2.6

使用 vllm 部署MiniCPM-o 2.6 1. 创建虚拟环境2. 克隆代码3. 从代码安装 vllm4. 安装 flash-attn5. 启动 MiniCPM-o 2.66. 使用 chatbox 客户端访问并测试一下 1. 创建虚拟环境 conda create -n vllm_openbmb python3.11 -y conda activate vllm_openbmb 2. 克隆代码 git clo…...

WSL 2 自动更新 虚拟 IP 到 window hosts

window下的wsl2 开发中使用到 域名映射&#xff0c;但是WSL2 每次启动都会被分配一个虚拟的 ip 地址&#xff0c;每次启动虚拟ip 都不一样&#xff0c;导致要频繁 更改 window 的 hosts 文件&#xff0c;太麻烦了&#xff0c;所以写一个自动执行的 .sh 脚本&#xff0c;每次启动…...

非常棒的长文本输入大模型:MiniMax以及基于它的海螺AI模型

非常棒的长文本输入大模型&#xff1a;基于MiniMax的海螺AI模型&#xff0c;快来体验一下吧&#xff01; 海螺AI—MiniMax 旗下生产力产品&#xff0c;你的AI伙伴&#xff0c;10倍速提升工作学习效率 这个大模型最大的特点就是支持长文本输入&#xff0c;而且是从内部就擅长对长…...

python milvus及curl命令进行query请求

代码如下: from pymilvus import MilvusClient client = MilvusClient( uri="http://localhost:19530", token="root:Milvus" ) res = client.query( collection_name="query_collection", filter="color like \"…...

谈谈MySQL中的索引和事务

目录 1. 索引 1.1 索引介绍 1.2 缺陷 1.3 使用 1.3.1 查看索引 1.3.2 创建索引 1.3.3 删除索引 2. 索引底层的数据结构 2.1 B树 3. 事务 3.1 为什么使用事务 3.2 事务的使用 3.3 事务的基本特性 1. 索引 1.1 索引介绍 索引相当于一本书的目录(index), 在一…...

Java 资源管理教程:掌握 close 方法、Cleaner 类与 Runtime.addShutdownHook

在 Java 编程中&#xff0c;高效地管理资源是至关重要的&#xff0c;特别是当你处理文件、数据库连接、网络连接等有限资源时。为了确保这些资源得到正确释放&#xff0c;Java 提供了多种机制。本教程将深入探讨 close 方法、Cleaner类以及 Runtime.addShutdownHook 方法&#…...

tensorflow源码编译在C++环境使用

https://tensorflow.google.cn/install/source?hlzh-cn查看tensorflow和其他需要下载软件对应的版本&#xff0c;最好一模一样 1、下载TensorFlow源码 https://github.com/tensorflow/tensorflow 2、安装编译protobuf&#xff08;3.9.2&#xff09; protobuf版本要和TensorFlo…...

算法日记8:StarryCoding60(单调栈)

一、题目 二、解题思路&#xff1a; 题意为让我们找到每个元素的左边第一个比它小的元素&#xff0c;若不存在则输出-1 2.1法一&#xff1a;暴力&#xff08;0n2&#xff09; 首先&#xff0c;我们可以想到最朴素的算法&#xff1a;直接暴力两层for达成目标核心代码如下&…...

HarmonyOS快速入门

HarmonyOS快速入门 1、基本概念 UI框架&#xff1a; HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可为开发者提供应用UI开发所必需的能力&#xff0c;比如多种组件、布局计算、动画能力、UI交互、绘制等。 方…...

基于微信小程序高校订餐系统的设计与开发ssm+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…...

stm32使用MDK5.35时遇到*** TOOLS.INI: TOOLCHAIN NOT INSTALLED

mdk5.35出现*** TOOLS.INI: TOOLCHAIN NOT INSTALLED的问题&#xff01;&#xff01;&#xff01;&#xff01; 以管理员身份重新打开MDK5.35.0.0&#xff0c;用keygen破解密码&#xff0c;但是一直提示我是没有破解成功。 解决办法&#xff1a; target 改成ARM...

Java面试专题——常见面试题1

引入 本文属于专题中的常见面试题模块&#xff0c;属于面试时经常遇到的&#xff0c;适合需要面试的小伙伴做面试前复习准备用&#xff0c;后续会持续补充 1.面向对象基本特征 面向对象的基本特征是什么&#xff1f;怎么理解&#xff1f; 面向对象的基本特征是封装、继承、…...

【C++】在线五子棋对战项目网页版

目录 1.Websocket 1.1.Websocket的简单认识 1.2.什么是轮询呢&#xff1f; 1.3.websocket协议切换过程 1.4.websocketpp库常用接口认识 1.5.websocketpp库搭建服务器流程 1.6.websocketpp库搭建服务器 2.mysqlclient库-接口认识 3.项目模块的划分&#xff1a; 4.项目…...

【Docker】搭建一个功能强大的自托管虚拟浏览器 - n.eko

前言 本教程基于群晖的NAS设备DS423的docker功能进行搭建&#xff0c;DSM版本为 DSM 7.2.2-72806 Update 2。 n.eko 支持多种类型浏览器在其虚拟环境中运行&#xff0c;本次教程使用 Chromium​ 浏览器镜像进行演示&#xff0c;支持访问内网设备和公网地址。 简介 n.eko 是…...