pandas进阶

  pandas是基于numpy构建的库,在数据处理方面可以把它理解为numpy的加强版,由于numpy主要用于科学计算,特长不在于数据处理,我们平常处理的数据一般带有列标签和index索引,这时pandas作为数据分析包而被开发出来。

pandas数据结构(Series/DataFrame)

一、Series

1、Series创建

  Series类似一维数组的数据结构,由一组数据(各种numpy数据类型)和与之关联的数据标签(索引)组成,结构相当于定长有序的字典,index和value之间相互独立.

In [2]:
import pandas as pd
import numpy as np
In [3]:
# 创建Series
a1 = pd.Series([1, 2, 3])  # 数组生成Series
a1
Out[3]:
0    1
1    2
2    3
dtype: int64
In [4]:
a2 = pd.Series(np.array([1, 2, 3]))  # numpy数组生成Series
a2
Out[4]:
0    1
1    2
2    3
dtype: int32
In [5]:
a3 = pd.Series([1, 2, 3], index=["index1", "index2", "index3"])  # 指定标签index生成
a3
Out[5]:
index1    1
index2    2
index3    3
dtype: int64
In [6]:
a4 = pd.Series({"index1": 1, "index2": 2, "index3": 3})  # 字典生成Series
a4
Out[6]:
index1    1
index2    2
index3    3
dtype: int64
In [8]:
a5 = pd.Series({"index": 1, "index2": 2, "index3": 3},
               index=["index1", "index2", "index3"])  # 字典生成Series,指定index,不匹配部分为NaN
a5
Out[8]:
index1    NaN
index2    2.0
index3    3.0
dtype: float64
In [9]:
a6 = pd.Series(10, index=["index1", "index2", "index3"])
a6
Out[9]:
index1    10
index2    10
index3    10
dtype: int64
 

2、Series属性

  可以把Series看成一个定长的有序字典

  可以通过shape(维度),size(长度),index(键),values(值)等得到series的属性

In [10]:
a1 = pd.Series([1, 2, 3])
a1.index  # Series索引
Out[10]:
RangeIndex(start=0, stop=3, step=1)
In [12]:
a1.values  # Series数值
Out[12]:
array([1, 2, 3], dtype=int64)
In [13]:
a1.name = "population"  # 指定Series名字
a1.index.name = "state"  # 指定Series索引名字
a1
Out[13]:
state
0    1
1    2
2    3
Name: population, dtype: int64
In [14]:
a1.shape
Out[14]:
(3,)
In [15]:
a1.size
Out[15]:
3
 

3、Series查找元素

loc为显示切片(通过键),iloc为隐式切片(通过索引)

访问单个元素

s[indexname]
s.loc[indexname] 推荐
s[loc]
s.iloc[loc] 推荐<

访问多个元素

s[[indexname1,indexname2]]
s.loc[[indexname1,indexname2]] 推荐
s[[loc1,loc2]]
s.iloc[[loc1,loc2]] 推荐

In [17]:
a3 = pd.Series([1, 2, 3], index=["index1", "index2", "index3"])
a3
Out[17]:
index1    1
index2    2
index3    3
dtype: int64
In [18]:
a3["index1"]
Out[18]:
1
In [19]:
a3.loc['index1']
Out[19]:
1
In [20]:
a3[1]
Out[20]:
2
In [22]:
a3.iloc[1]
Out[22]:
2
In [23]:
a3[['index1','index2']]
Out[23]:
index1    1
index2    2
dtype: int64
In [24]:
a3.loc[['index1','index2']]
Out[24]:
index1    1
index2    2
dtype: int64
In [25]:
a3[[1,2]]
Out[25]:
index2    2
index3    3
dtype: int64
In [26]:
a3.iloc[[1,2]]
Out[26]:
index2    2
index3    3
dtype: int64
In [27]:
a3[a3 > np.mean(a3)]  # 布尔值查找元素
Out[27]:
index3    3
dtype: int64
In [28]:
a3[0:2]  # 绝对位置切片
Out[28]:
index1    1
index2    2
dtype: int64
In [30]:
a3["index1":"index2"]  # 索引切片
Out[30]:
index1    1
index2    2
dtype: int64
 

4、Series修改元素

In [32]:
# 修改元素
a3["index3"] = 100  # 按照索引修改元素
a3
Out[32]:
index1      1
index2      2
index3    100
dtype: int64
In [33]:
a3[2] = 1000  # 按照绝对位置修改元素
a3
Out[33]:
index1       1
index2       2
index3    1000
dtype: int64
 

5、Series添加元素

In [34]:
# 添加元素
a3["index4"] = 10  # 按照索引添加元素
a3
Out[34]:
index1       1
index2       2
index3    1000
index4      10
dtype: int64
 

6、Series删除元素

In [35]:
a3.drop(["index4", "index3"], inplace=True)  # inplace=True表示作用在当前Series
a3
Out[35]:
index1    1
index2    2
dtype: int64
 

7、Series方法

In [36]:
a3 = pd.Series([1, 2, 3], index=["index1", "index2", "index3"])
a3["index3"] = np.NaN  # 添加元素
a3
Out[36]:
index1    1.0
index2    2.0
index3    NaN
dtype: float64
In [37]:
a3.isnull()  # 判断Series是否有缺失值
Out[37]:
index1    False
index2    False
index3     True
dtype: bool
In [38]:
a3.notnull()  # 判断Series是否没有缺失值
Out[38]:
index1     True
index2     True
index3    False
dtype: bool
In [39]:
"index1" in a3  # 判断Series中某个索引是否存在
Out[39]:
True
In [47]:
a3.isin([1,2])  # 判断Series中某个值是否存在
Out[47]:
index1     True
index2     True
index3    False
dtype: bool
In [48]:
a3.unique()  # 统计Series中去重元素
Out[48]:
array([ 1.,  2., nan])
In [49]:
a3.value_counts()  # 统计Series中去重元素和个数
Out[49]:
2.0    1
1.0    1
dtype: int64
 

二、Dataframe

  DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。

行索引:index
列索引:columns
值:values(numpy的二维数组)

 

1、创建DataFrame

1.1通过字典创建

In [50]:
data = {"color": ["green", "red", "blue", "black", "yellow"], "price": [1, 2, 3, 4, 5]}
dataFrame1 = pd.DataFrame(data=data)  # 通过字典创建
dataFrame1
Out[50]:
 
 colorprice
0green1
1red2
2blue3
3black4
4yellow5
In [51]:
dataFrame2 = pd.DataFrame(data=data, index=["index1", "index2", "index3", "index4", "index5"])
dataFrame2
Out[51]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
In [52]:
dataFrame3 = pd.DataFrame(data=data, index=["index1", "index2", "index3", "index4", "index5"],
                          columns=["price"])  # 指定列索引
dataFrame3
Out[52]:
 
 price
index11
index22
index33
index44
index55
In [53]:
dataFrame4 = pd.DataFrame(data=np.arange(12).reshape(3, 4))  # 通过numpy数组创建
dataFrame4
Out[53]:
 
 0123
00123
14567
2891011
In [54]:
dic = {
    '张三':[150,150,150,300],
    '李四':[0,0,0,0]
}
pd.DataFrame(data=dic,index=['语文','数学','英语','理综'])
Out[54]:
 
 张三李四
语文1500
数学1500
英语1500
理综3000
In [56]:
data = [[0,150],[0,150],[0,150],[0,300]]
index = ['语文','数学','英语','理综']
columns = ['李四','张三']
pd.DataFrame(data=data,index=index,columns=columns)
Out[56]:
 
 李四张三
语文0150
数学0150
英语0150
理综0300
 

1.2通过Series创建

In [59]:
cars = pd.Series({"Beijing": 300000, "Shanghai": 350000, "Shenzhen": 300000, "Tianjian": 200000, "Guangzhou": 250000,
                  "Chongqing": 150000})
cars
Out[59]:
Beijing      300000
Shanghai     350000
Shenzhen     300000
Tianjian     200000
Guangzhou    250000
Chongqing    150000
dtype: int64
In [60]:
cities = {"Shanghai": 90000, "Foshan": 4500, "Dongguan": 5500, "Beijing": 6600, "Nanjing": 8000, "Lanzhou": None}
apts = pd.Series(cities, name="price")
apts
Out[60]:
Shanghai    90000.0
Foshan       4500.0
Dongguan     5500.0
Beijing      6600.0
Nanjing      8000.0
Lanzhou         NaN
Name: price, dtype: float64
In [61]:
df = pd.DataFrame({"apts": apts, "cars": cars})
df
Out[61]:
 
 aptscars
Beijing6600.0300000.0
ChongqingNaN150000.0
Dongguan5500.0NaN
Foshan4500.0NaN
GuangzhouNaN250000.0
LanzhouNaNNaN
Nanjing8000.0NaN
Shanghai90000.0350000.0
ShenzhenNaN300000.0
TianjianNaN200000.0
 

1.3通过dicts的list来构建Dataframe

In [62]:
data = [{"Beijing": 1000, "Shanghai": 2500, "Nanjing": 9850}, {"Beijing": 5000, "Shanghai": 4600, "Nanjing": 7000}]
pd.DataFrame(data)
Out[62]:
 
 BeijingNanjingShanghai
0100098502500
1500070004600
 

2、查找DataFrame中的元素

In [65]:
data = {"color": ["green", "red", "blue", "black", "yellow"], "price": [1, 2, 3, 4, 5]}
dataFrame2 = pd.DataFrame(data=data, index=["index1", "index2", "index3", "index4", "index5"])
dataFrame2
Out[65]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
In [66]:
dataFrame2.columns  # 查找dataFrame中所有列标签
Out[66]:
Index(['color', 'price'], dtype='object')
In [67]:
dataFrame2.index  # 查找dataFrame中的所有行标签
Out[67]:
Index(['index1', 'index2', 'index3', 'index4', 'index5'], dtype='object')
In [68]:
dataFrame2.values  # 查找dataFrame中的所有值
Out[68]:
array([['green', 1],
       ['red', 2],
       ['blue', 3],
       ['black', 4],
       ['yellow', 5]], dtype=object)
In [72]:
dataFrame2["color"]["index1"]  # 索引查找数值(先列后行,否则报错)
Out[72]:
'green'
In [73]:
dataFrame2.at["index1", "color"]  # 索引查找数值(先行后列,否则报错)
Out[73]:
'green'
In [79]:
dataFrame2.iat[0, 1]  # 绝对位置查找数值
Out[79]:
1
 

3、查找DataFrame中某一行/列元素

In [89]:
data = {"color": ["green", "red", "blue", "black", "yellow"], "price": [1, 2, 3, 4, 5]}
dataFrame2 = pd.DataFrame(data=data, index=["index1", "index2", "index3", "index4", "index5"])
dataFrame2
Out[89]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
In [91]:
dataFrame2.loc["index1"]  # 查找一行元素
Out[91]:
color    green
price        1
Name: index1, dtype: object
In [92]:
dataFrame2.iloc[0]  # 查找一行元素(绝对位置)
Out[92]:
color    green
price        1
Name: index1, dtype: object
In [96]:
dataFrame2.iloc[0:2]  # 通过iloc方法可以拿到行和列,直接按照index的顺序来取。# 可以当做numpy的ndarray的二维数组来操作。
Out[96]:
 
 colorprice
index1green1
index2red2
In [100]:
dataFrame2.loc[:, "price"]  # 查找一列元素
Out[100]:
index1    1
index2    2
index3    3
index4    4
index5    5
Name: price, dtype: int64
In [101]:
dataFrame2.iloc[:, 0]  # 查找一列元素(绝对位置)
Out[101]:
index1     green
index2       red
index3      blue
index4     black
index5    yellow
Name: color, dtype: object
In [102]:
dataFrame2.values[0]  # 查找一行元素
Out[102]:
array(['green', 1], dtype=object)
In [103]:
dataFrame2["price"]  # 查找一列元素,#通过列名的方式,查找列,不能查找行
Out[103]:
index1    1
index2    2
index3    3
index4    4
index5    5
Name: price, dtype: int64
In [104]:
dataFrame2["color"] 
Out[104]:
index1     green
index2       red
index3      blue
index4     black
index5    yellow
Name: color, dtype: object
 

4、查找DataFrame中的多行/列元素

In [106]:
dataFrame2.head(5)  # 查看前5行元素
Out[106]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
In [107]:
dataFrame2.tail(5)  # 查看后5行元素
Out[107]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
In [108]:
dataFrame2["index1":"index4"]  # 切片多行
Out[108]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
In [109]:
dataFrame2[0:4]  # 切片多行
Out[109]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
In [111]:
dataFrame2.loc[["index1", "index2"]]  # 多行
Out[111]:
 
 colorprice
index1green1
index2red2
In [113]:
dataFrame2.iloc[[0, 1]]  # 多行
Out[113]:
 
 colorprice
index1green1
index2red2
In [114]:
dataFrame2.loc[:, ["price"]]  # 多列
Out[114]:
 
 price
index11
index22
index33
index44
index55
In [115]:
dataFrame2.iloc[:, [0, 1]]  # 多列
Out[115]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
In [116]:
dataFrame2.loc[["index1", "index3"], ["price"]]  # 索引查找
Out[116]:
 
 price
index11
index33
In [117]:
dataFrame2.iloc[[1, 2], [0]]  # 绝对位置查找
Out[117]:
 
 color
index2red
index3blue
 

5、添加一行/列元素

In [119]:
dataFrame2.loc["index6"] = ["pink", 3] 
dataFrame2
Out[119]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
index6pink3
In [120]:
dataFrame2.loc["index6"]=10
dataFrame2
Out[120]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
index61010
In [123]:
dataFrame2.iloc[5] = 10
dataFrame2
Out[123]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
index61010
In [125]:
dataFrame2.loc["index7"] = 100
dataFrame2
Out[125]:
 
 colorprice
index1green1
index2red2
index3blue3
index4black4
index5yellow5
index61010
index7100100
In [129]:
dataFrame2.loc[:, "size"] = "small"
dataFrame2
Out[129]:
 
 colorpricesize
index1green1small
index2red2small
index3blue3small
index4black4small
index5yellow5small
index61010small
index7100100small
In [130]:
dataFrame2.iloc[:, 2] = 10
dataFrame2
Out[130]:
 
 colorpricesize
index1green110
index2red210
index3blue310
index4black410
index5yellow510
index6101010
index710010010
 

6、修改元素

In [131]:
dataFrame2.loc["index1", "price"] = 100
dataFrame2
Out[131]:
 
 colorpricesize
index1green10010
index2red210
index3blue310
index4black410
index5yellow510
index6101010
index710010010
In [132]:
dataFrame2.iloc[0, 1] = 10
dataFrame2
Out[132]:
 
 colorpricesize
index1green1010
index2red210
index3blue310
index4black410
index5yellow510
index6101010
index710010010
In [133]:
dataFrame2.at["index1", "price"] = 100
dataFrame2
Out[133]:
 
 colorpricesize
index1green10010
index2red210
index3blue310
index4black410
index5yellow510
index6101010
index710010010
In [135]:
dataFrame2.iat[0, 1] = 1000
dataFrame2
Out[135]:
 
 colorpricesize
index1green100010
index2red210
index3blue310
index4black410
index5yellow510
index6101010
index710010010
 

7、删除元素

In [136]:
dataFrame2.drop(["index6", "index7"], inplace=True)  # inplace=True表示作用在原数组
dataFrame2
Out[136]:
 
 colorpricesize
index1green100010
index2red210
index3blue310
index4black410
index5yellow510
In [141]:
a=dataFrame2.drop(["price"], axis=1, inplace=False)
dataFrame2
Out[141]:
 
 colorprice
index1green1000
index2red2
index3blue3
index4black4
index5yellow5
In [142]:
a
Out[142]:
 
 color
index1green
index2red
index3blue
index4black
index5yellow
 

8. 处理NaN数据

In [148]:
dates = pd.date_range('20180101', periods=3)
df = pd.DataFrame(np.arange(12).reshape((3, 4)),
                  index=dates, columns=['a', 'b', 'c', 'd'])
df.iloc[1, 1], df.iloc[2, 2] = np.nan, np.nan
df
Out[148]:
 
 abcd
2018-01-0101.02.03
2018-01-024NaN6.07
2018-01-0389.0NaN11
 

8.1删除NaN数据

In [151]:
re=df.dropna(axis=1, inplace=False)  # inplace默认为false
df
Out[151]:
 
 abcd
2018-01-0101.02.03
2018-01-024NaN6.07
2018-01-0389.0NaN11
In [152]:
re
Out[152]:
 
 ad
2018-01-0103
2018-01-0247
2018-01-03811
 

8.2填充NaN数据

In [153]:
re2 = df.fillna(value='*')
re2
Out[153]:
 
 abcd
2018-01-010123
2018-01-024*67
2018-01-0389*11
 

8.3 检查是否存在NaN

In [155]:
df.isnull()
Out[155]:
 
 abcd
2018-01-01FalseFalseFalseFalse
2018-01-02FalseTrueFalseFalse
2018-01-03FalseFalseTrueFalse
 

9.合并DataFrame

 

9.1 concat函数

In [156]:
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['a', 'b', 'c', 'd'])
df1
Out[156]:
 
 abcd
00.00.00.00.0
10.00.00.00.0
20.00.00.00.0
In [157]:
df2 = pd.DataFrame(np.ones((3, 4)) * 1, columns=['a', 'b', 'c', 'd'])
df2
Out[157]:
 
 abcd
01.01.01.01.0
11.01.01.01.0
21.01.01.01.0
In [158]:
df3 = pd.DataFrame(np.ones((3, 4)) * 2, columns=['a', 'b', 'c', 'd'])
df3
Out[158]:
 
 abcd
02.02.02.02.0
12.02.02.02.0
22.02.02.02.0
In [159]:
# ignore_index=True将重新对index排序
pd.concat([df1, df2, df3], axis=0, ignore_index=True)
Out[159]:
 
 abcd
00.00.00.00.0
10.00.00.00.0
20.00.00.00.0
31.01.01.01.0
41.01.01.01.0
51.01.01.01.0
62.02.02.02.0
72.02.02.02.0
82.02.02.02.0
In [160]:
# ignore_index=True将重新对index排序
pd.concat([df1, df2, df3], axis=0, ignore_index=False)
Out[160]:
 
 abcd
00.00.00.00.0
10.00.00.00.0
20.00.00.00.0
01.01.01.01.0
11.01.01.01.0
21.01.01.01.0
02.02.02.02.0
12.02.02.02.0
22.02.02.02.0
 

join参数用法

In [164]:
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['a', 'b', 'c', 'd'], index=[1, 2, 3])
df2 = pd.DataFrame(np.ones((3, 4)) * 1, columns=['b', 'c', 'd', 'e'], index=[2, 3, 4])
# join默认为'outer',不共有的列用NaN填充 
pd.concat([df1, df2], sort=False, join='outer')
Out[164]:
 
 abcde
10.00.00.00.0NaN
20.00.00.00.0NaN
30.00.00.00.0NaN
2NaN1.01.01.01.0
3NaN1.01.01.01.0
4NaN1.01.01.01.0
In [166]:
# join='inner'只合并共有的列
pd.concat([df1, df2], sort=False, join='inner',ignore_index=True)
Out[166]:
 
 bcd
00.00.00.0
10.00.00.0
20.00.00.0
31.01.01.0
41.01.01.0
51.01.01.0
 

join_axes参数用法

In [167]:
# 按照df1的index进行合并
pd.concat([df1, df2], axis=1, join_axes=[df1.index])
Out[167]:
 
 abcdbcde
10.00.00.00.0NaNNaNNaNNaN
20.00.00.00.01.01.01.01.0
30.00.00.00.01.01.01.01.0
 

9.2 append函数

In [169]:
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame(np.ones((3, 4)) * 1, columns=['a', 'b', 'c', 'd'])

re = df1.append(df2, ignore_index=True)
re
Out[169]:
 
 abcd
00.00.00.00.0
10.00.00.00.0
20.00.00.00.0
31.01.01.01.0
41.01.01.01.0
51.01.01.01.0
 

append一组数据

In [170]:
df1 = pd.DataFrame(np.ones((3, 4)) * 0, columns=['a', 'b', 'c', 'd'])
s = pd.Series([4, 4, 4, 4], index=['a', 'b', 'c', 'd'])

re = df1.append(s, ignore_index=True)
re
Out[170]:
 
 abcd
00.00.00.00.0
10.00.00.00.0
20.00.00.00.0
34.04.04.04.0
 

9.3 merge函数

基于某一列进行合并

In [171]:
df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'KEY': ['K1', 'K2', 'K3']})
df2 = pd.DataFrame({'C': ['C1', 'C2', 'C3'],
                    'D': ['D1', 'D2', 'D3'],
                    'KEY': ['K1', 'K2', 'K3']})

df1
Out[171]:
 
 ABKEY
0A1B1K1
1A2B2K2
2A3B3K3
In [172]:
df2
Out[172]:
 
 CDKEY
0C1D1K1
1C2D2K2
2C3D3K3
In [173]:
re = pd.merge(df1, df2, on='KEY')
re
Out[173]:
 
 ABKEYCD
0A1B1K1C1D1
1A2B2K2C2D2
2A3B3K3C3D3
 

基于某两列进行合并

In [175]:
df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3'],
                    'KEY1': ['K1', 'K2', 'K0'],
                    'KEY2': ['K0', 'K1', 'K3']})
df2 = pd.DataFrame({'C': ['C1', 'C2', 'C3'],
                    'D': ['D1', 'D2', 'D3'],
                    'KEY1': ['K0', 'K2', 'K1'],
                    'KEY2': ['K1', 'K1', 'K0']})
# how:['left','right','outer','inner']
re = pd.merge(df1, df2, on=['KEY1', 'KEY2'], how='inner')
re
Out[175]:
 
 ABKEY1KEY2CD
0A1B1K1K0C3D3
1A2B2K2K1C2D2
 

按index合并

In [176]:
df1 = pd.DataFrame({'A': ['A1', 'A2', 'A3'],
                    'B': ['B1', 'B2', 'B3']},
                   index=['K0', 'K1', 'K2'])
df2 = pd.DataFrame({'C': ['C1', 'C2', 'C3'],
                    'D': ['D1', 'D2', 'D3']},
                   index=['K0', 'K1', 'K3'])

re = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
re
Out[176]:
 
 ABCD
K0A1B1C1D1
K1A2B2C2D2
K2A3B3NaNNaN
K3NaNNaNC3D3
 

为列加后缀

In [177]:
df_boys = pd.DataFrame({'id': ['1', '2', '3'],
                        'age': ['23', '25', '18']})
df_girls = pd.DataFrame({'id': ['1', '2', '3'],
                         'age': ['18', '18', '18']})
re = pd.merge(df_boys, df_girls, on='id', suffixes=['_boys', '_girls'])
re
Out[177]:
 
 idage_boysage_girls
012318
122518
231818

转载于:https://www.cnblogs.com/xinmomoyan/p/10871780.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值