add new files
parent
36769abda5
commit
92ff42bd14
|
@ -0,0 +1,43 @@
|
|||
去重获取唯一值是常见的需求,下面我们看看pandas里面如何实现去重。
|
||||
直接看代码
|
||||
|
||||
```
|
||||
import pandas as pd
|
||||
|
||||
def test():
|
||||
df = pd.DataFrame({"c1": [1, 1, 2, 3, 1], "c2": [10, 20, 30, 40, 50]})
|
||||
print(df)
|
||||
print()
|
||||
result = df['c1'].unique()
|
||||
print(result)
|
||||
print(type(result))
|
||||
print(result.tolist())
|
||||
print()
|
||||
|
||||
ret = df[df['c1'] == 1]['c2'].unique()
|
||||
print(ret)
|
||||
print(type(ret))
|
||||
```
|
||||
|
||||
运行上面的代码,得到如下结果
|
||||
|
||||
```
|
||||
c1 c2
|
||||
0 1 10
|
||||
1 1 20
|
||||
2 2 30
|
||||
3 3 40
|
||||
4 1 50
|
||||
|
||||
[1 2 3]
|
||||
<class 'numpy.ndarray'>
|
||||
[1, 2, 3]
|
||||
|
||||
[10 20 50]
|
||||
<class 'numpy.ndarray'>
|
||||
```
|
||||
|
||||
具体分析:
|
||||
1.如果要对某列去重获取谓一致,可以直接获取该列然后调用unique()方法即可。
|
||||
2.unique()方法得到的对象是numpy.ndarray类型,后续可以调用tolist方法转换为一个列表。
|
||||
3.如果我们想得到c1列值为1的情况下,c2列的去重置,可以先使用过滤逻辑df['c1'] == 1会返回True/False。 条件匹配时为真,条件不匹配时为假。 稍后它在df内传递并返回与True对应的所有行,然后按照前面的方法,取c2列再去重即可。
|
|
@ -0,0 +1,59 @@
|
|||
## 1.测试数据
|
||||
|
||||
```
|
||||
1457822940 0 0 44 36
|
||||
422692440 0 0 3 3
|
||||
1460826600 0 0 7 6
|
||||
1410115140 -1 3 25 7
|
||||
1161370800 0 0 18 14
|
||||
996746700 0 0 30 25
|
||||
1115896320 0 0 441 123
|
||||
64954980 0 0 7 7
|
||||
2307334696 0 0 2 2
|
||||
417770700 0 0 1 1
|
||||
```
|
||||
|
||||
## 2.获取行数,列数,元素个数等
|
||||
|
||||
```
|
||||
def test():
|
||||
names = ['c1', 'c2', 'c3', 'c4', 'c5']
|
||||
df = pd.read_csv("testdata", sep="\t", header=None, names=names)
|
||||
print(df.info())
|
||||
print("\n")
|
||||
print("len is: ", len(df))
|
||||
print("columns is: ", df.columns)
|
||||
print("shape is: ", df.shape)
|
||||
print("size is: ", df.size)
|
||||
```
|
||||
|
||||
代码输出结果:
|
||||
|
||||
```
|
||||
<class 'pandas.core.frame.DataFrame'>
|
||||
RangeIndex: 10 entries, 0 to 9
|
||||
Data columns (total 5 columns):
|
||||
# Column Non-Null Count Dtype
|
||||
--- ------ -------------- -----
|
||||
0 c1 10 non-null int64
|
||||
1 c2 10 non-null int64
|
||||
2 c3 10 non-null int64
|
||||
3 c4 10 non-null int64
|
||||
4 c5 10 non-null int64
|
||||
dtypes: int64(5)
|
||||
memory usage: 528.0 bytes
|
||||
None
|
||||
|
||||
|
||||
len is: 10
|
||||
columns is: Index(['c1', 'c2', 'c3', 'c4', 'c5'], dtype='object')
|
||||
shape is: (10, 5)
|
||||
size is: 50
|
||||
```
|
||||
|
||||
其中,info()方法包含了很多信息,包括类型,column信息,non-null的个数,数据类型,内存占用等。
|
||||
|
||||
len(df)可以获取dataframe的行数
|
||||
columns可以获取column相关的信息
|
||||
shape是个二元元组,包括行列信息,所以如果想得到dataframe的行列数据可以通过shape获取。
|
||||
size则是整个dataframe的元素个数。
|
|
@ -0,0 +1,47 @@
|
|||
实际开发中经常有修改dataframe列名的需求,特意总结了如下可用的几种方法。
|
||||
|
||||
```
|
||||
import pandas as pd
|
||||
|
||||
|
||||
def t1():
|
||||
df = pd.DataFrame({'c1':[1, 2, 3], 'c2': [4, 5, 6]})
|
||||
print(df)
|
||||
|
||||
df.columns = ['d1', 'd2']
|
||||
print(df)
|
||||
|
||||
df.rename(columns={'d1': 'e1', 'd2': 'e2'}, inplace=True)
|
||||
print(df)
|
||||
|
||||
df = df.rename(columns={'e1': 'f1', 'e2': 'f2'})
|
||||
print(df)
|
||||
|
||||
|
||||
t1()
|
||||
```
|
||||
|
||||
上面代码的输出:
|
||||
|
||||
```
|
||||
c1 c2
|
||||
0 1 4
|
||||
1 2 5
|
||||
2 3 6
|
||||
d1 d2
|
||||
0 1 4
|
||||
1 2 5
|
||||
2 3 6
|
||||
e1 e2
|
||||
0 1 4
|
||||
1 2 5
|
||||
2 3 6
|
||||
f1 f2
|
||||
0 1 4
|
||||
1 2 5
|
||||
2 3 6
|
||||
```
|
||||
|
||||
由上面的代码可以看出,修改列名的两种方式为:
|
||||
1.直接使用df.columns的方式重新命名,不过这种方式需要列出所有列名。
|
||||
2.使用rename方法,注意如果需要原地修改需要带上inplace=True的参数,否则原dataframe列名不会发生改变。
|
Loading…
Reference in New Issue