add new files

master
wanglei 2021-01-31 18:55:21 +08:00
parent 36769abda5
commit 92ff42bd14
3 changed files with 149 additions and 0 deletions

View File

@ -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列再去重即可。

View File

@ -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的元素个数。

View File

@ -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列名不会发生改变。