如何使用 python 数据修复翻转
Posted
技术标签:
【中文标题】如何使用 python 数据修复翻转【英文标题】:how to fix rollover with python data 【发布时间】:2017-10-20 21:51:20 【问题描述】:假设我有这个 csv 文件,我想使用 pyplot 和 pandas 在 python 中导入和绘制图形。
1,2
2,4
3,3
4,4
5,6
6,3
7,5
8,6
1,3
2,5
3,7
4,4
5,3
6,5
7,4
8,5
1,3
2,2
3,5
4,4
5,3
6,5
7,6
8,7
如您所见,第 1 列在数字 8 处翻转。我怎样才能摆脱这种翻转,使其现在看起来像这样:
1,2
2,4
3,3
4,4
5,6
6,3
7,5
8,6
9,3
10,5
11,7
12,4
13,3
14,5
15,4
16,5
17,3
18,2
19,5
20,4
21,3
22,5
23,6
24,7
我尝试了一个 for 循环来搜索该列并跟踪每次找到一个小于上一个数字的数字...这一定意味着翻转!我正在遍历整个数据集(这是 95,000 个元素!),当我看到当前项目比上一个项目大时,我将它乘以一个计数器......当这是错误的时候,计数器会增加我添加它到当前条目,直到检测到另一个翻转。
但是,我做错了什么,我不确定是什么..我的索引最后搞砸了.. 用 Python 的方式来搜索这个烂摊子是什么?
【问题讨论】:
第一列的数字是连续的吗?如果是这种情况,您为什么不直接忽略它,因为您似乎已经知道第一列应该是什么?比如:pd.read_csv('data.csv', usecols=[1])
【参考方案1】:
我想给出一个数学解...
阅读我的 csv
df
a b
0 1 2
1 2 4
2 3 3
3 4 4
4 5 6
5 6 3
6 7 5
7 8 6
8 1 3
9 2 5
10 3 7
11 4 4
12 5 3
13 6 5
14 7 4
15 8 5
16 1 3
17 2 2
18 3 5
19 4 4
20 5 3
21 6 5
22 7 6
23 8 7
然后是groupby
和cumcount
。将新的cumcount
乘以8
并添加到第一列。
df.a += df.groupby('a').cumcount() * 8
df
a b
0 1 2
1 2 4
2 3 3
3 4 4
4 5 6
5 6 3
6 7 5
7 8 6
8 9 3
9 10 5
10 11 7
11 12 4
12 13 3
13 14 5
14 15 4
15 16 5
16 17 3
17 18 2
18 19 5
19 20 4
20 21 3
21 22 5
22 23 6
23 24 7
【讨论】:
【参考方案2】:我们甚至不要在第一列中导入,而是让数据框的默认范围索引的索引作为您的 x 轴与 pandas df.plot。
from io import StringIO
csv_file = StringIO("""
1,2
2,4
3,3
4,4
5,6
6,3
7,5
8,6
1,3
2,5
3,7
4,4
5,3
6,5
7,4
8,5
1,3
2,2
3,5
4,4
5,3
6,5
7,6
8,7""")
df = pd.read_csv(csv_file, header=None, usecols=[1])
df.plot()
输出:
【讨论】:
【参考方案3】:当您通过 pandas 导入文件时创建的数据框的索引应该已经提供了您正在寻找的整数的连续列表。只需根据第二列绘制索引即可。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("Filename.csv")
plt.plot(list(df.index),list(df['column_2']))
plt.show()
【讨论】:
以上是关于如何使用 python 数据修复翻转的主要内容,如果未能解决你的问题,请参考以下文章
Python对列表排序函数sort()和reverse()的讲解