列表列表,数据分析Python
我将csv转换为列表:列表列表,数据分析Python,python,python-2.7,list,csv,Python,Python 2.7,List,Csv,我将csv转换为列表: import csv with open('DataAnalizada.csv', 'rb') as f: reader = csv.reader(f) a = list(reader) 我需要分析该列表中的信息,其中按客户群体和日期进行分析,首先是2017年12月27日的AAA客户、2017年12月28日的AAA客户、2017年12月27日的BBB客户、2017年12月28日的BBB客户、2017年12月27日的CCC客户、2017年12月28日的CC
import csv
with open('DataAnalizada.csv', 'rb') as f:
reader = csv.reader(f)
a = list(reader)
我需要分析该列表中的信息,其中按客户群体和日期进行分析,首先是2017年12月27日的AAA客户、2017年12月28日的AAA客户、2017年12月27日的BBB客户、2017年12月28日的BBB客户、2017年12月27日的CCC客户、2017年12月28日的CCC客户,并且在这些群体中的每一个都考虑到了分析(稳定警报或增量,这是可以呈现的3个变量)在这种情况下,如果2017年12月27日AAA客户的所有分析值我们是稳定的,我希望新的csv文件出现:AAA,2017年12月27日,客户的表现是稳定的,等等,每个客户和日期
我需要一些有条件的功能,对于每个列表,客户和日期相等,分析分析分析列,并根据此分析,如果他们都是可测试的,AAA,2017年12月27日,可测试:客户的表现是可测试的,如果没有AAA,2017年12月27日,没有分析
我对python还相当陌生,我不能诚恳地独自完成它。我不知道如何像我之前所问的那样浏览嵌套列表并对其进行分组。对于问题中缺少代码,我深表歉意
a = [['Cliente', 'Fecha', 'Variables', 'Dia Previo', 'Mayor/Menor', 'Dia a Analizar', 'Analisis'],
['AAA', '27/12/2017', 'ECPM_medio', '0.41', 'Dentro del Margen', '0.35', 'Estable'],
['AAA', '27/12/2017', 'Fill_rate', '2.25', 'Dentro del Margen', '2.7', 'Estable'],
['AAA', '27/12/2017', 'Importe_a_pagar_a_medio', '62.4', 'Dentro del Margen', '61.21', 'Estable'],
['AAA', '27/12/2017', 'Impresiones_exchange', '153927.0', 'Dentro del Margen', '173663.0', 'Estable'],
['AAA', '27/12/2017', 'Subastas', '6827946.0', 'Dentro del Margen', '6431093.0', 'Estable'],
['BBB', '27/12/2017', 'ECPM_medio', '1.06', 'Dentro del Margen', '1.06', 'Alerta'],
['BBB', '27/12/2017', 'Fill_rate', '26.67', 'Dentro del Margen', '27.2', 'Alerta'],
['BBB', '27/12/2017', 'Importe_a_pagar_a_medio', '11.34', 'Dentro del Margen', '12.77', 'Estable'],
['BBB', '27/12/2017', 'Impresiones_exchange', '10648.0', 'Dentro del Margen', '12099.0', 'Estable'],
['BBB', '27/12/2017', 'Subastas', '39930.0', 'Dentro del Margen', '44479.0', 'Estable'],
['AAA', '28/12/2017', 'ECPM_medio', '0.41', 'Dentro del Margen', '0.35', 'Estable'],
['AAA', '28/12/2017', 'Fill_rate', '2.25', 'Dentro del Margen', '2.7', 'Estable'],
['AAA', '28/12/2017', 'Importe_a_pagar_a_medio', '62.4', 'Dentro del Margen', '61.21', 'Estable'],
['AAA', '28/12/2017', 'Impresiones_exchange', '153927.0', 'Dentro del Margen', '173663.0', 'Estable'],
['AAA', '28/12/2017', 'Subastas', '6827946.0', 'Dentro del Margen', '6431093.0', 'Estable'],
['BBB', '28/12/2017', 'ECPM_medio', '1.06', 'Dentro del Margen', '1.06', 'Estable'],
['BBB', '28/12/2017', 'Fill_rate', '26.67', 'Dentro del Margen', '27.2', 'Estable'],
['BBB', '28/12/2017', 'Importe_a_pagar_a_medio', '11.34', 'Dentro del Margen', '12.77', 'Estable'],
['BBB', '28/12/2017', 'Impresiones_exchange', '10648.0', 'Dentro del Margen', '12099.0', 'Estable'],
['BBB', '28/12/2017', 'Subastas', '39930.0', 'Dentro del Margen', '44479.0', 'Estable']]
我需要的新csv示例如下:
Cliente,Fecha,Analisis
AAA,27/12/2017,Stable: The client's performance was Stable
AAA,28/12/2017,Stable: The client's performance was Stable
BBB,27/12/2017,Stable: The client's performance was Stable
BBB,28/12/2017, Stable: The client's performance was Stable
CCC,27/12/2017,Stable: The client's performance was Stable
CCC,28/12/2017,Stable: The client's performance was Stable
Pandas软件包有您需要的工具。但是,我建议您从开始,因为我发现自己安装Pandas非常困难。我认为这可能会让您得到您想要的东西,但是,我不确定这是否会完全有帮助。因为您没有筛选数据的条件,我尝试了以下方法来获得数据你想要的输出。注意,这只是一个尝试,引导你走向熊猫
pandas
将是进行此操作的最佳方式,因为您可以按照您想要的方式操作数据。读取csv
我这样做只是为了把你们的数据放到熊猫数据框里
import pandas as pd
headers = a.pop(0)
df = pd.DataFrame(a, columns = headers)
df
输出:
Cliente Fecha Variables Dia Previo Mayor/Menor Dia a Analizar Analisis
0 AAA 27/12/2017 ECPM_medio 0.41 Dentro del Margen 0.35 Estable
1 AAA 27/12/2017 Fill_rate 2.25 Dentro del Margen 2.7 Estable
...
在此之后,我创建了一个状态为的新列(仍然不知道确切的条件)
现在,您可以在pandas中使用groupby
函数来创建所需的输出
df1= df.groupby(['Cliente','Fecha', 'Status']).size()
df1
产出
Cliente Fecha Status
AAA 27/12/2017 Stable: The clients performance was Stable 5
28/12/2017 Stable: The clients performance was Stable 5
BBB 27/12/2017 Stable: The clients performance was Stable 5
28/12/2017 Stable: The clients performance was Stable 5
当您使用groupby
时,必须使用聚合函数,我使用了.size()
现在,您可以将此数据帧df1写入csv。您也可以将其封装到函数中。希望这将为您的目的提供一种有效的分析方法。您可以发布一个示例输出吗?对于这些类型的分析,为什么不
pandas
呢?我只是从您的示例数据中为我的肉眼添加了一个!@I.n.n.mf一切都应该是稳定的,因为BBB也出现在这两个日期。否则,BBB,2017年12月28日,在什么情况下不进行分析
?另外,让我们删除上面的一些评论以保持干净我很抱歉我编辑了列表但没有保存!是的,你在写!现在我们以同样的方式!你现在明白我的问题了吗?@I.n.n.mi希望是这样现在可以帮你了!没问题,但我有一个问题。如果分析栏中有一个“down”,我的结果是一样的稳定:客户端的性能是稳定的。这怎么可能呢?确切的条件是,例如Cliente AAA
的任何栏都有你的分析栏可设置的,df['Status']=“稳定:客户端的性能是稳定的”< /代码>如果不是'df'状态'=“不分析”,你需要提供一个答案,而不是你对你使用的工具的看法。
import csv
from collections import namedtuple
with open('DataAnalizada.csv', 'rb') as f:
reader = csv.reader(f)
first_col = reader.next()
header = namedtuple('header', first_col)
data = {}
for val in reader:
get_ = header(*val)
if get_.Analisis == 'Estable':
get_data = (get_.Cliente, get_.Fecha)
if get_data in data:
get_list = data[get_data]
get_list.append(val)
else:
data.setdefault(get_data, [])
with open('DataAnalizada_new.csv', 'wb+') as filename:
header = ['Cliente','Fecha','Analisis']
writer = csv.writer(filename)
writer.writerow(header)
for val in data.keys():
writer.writerow(val + ["Stable: The client's performance was Stable"])
import csv
from collections import namedtuple
with open('DataAnalizada.csv', 'rb') as f:
reader = csv.reader(f)
first_col = reader.next()
header = namedtuple('header', first_col)
data = {}
for val in reader:
get_ = header(*val)
if get_.Analisis == 'Estable':
get_data = (get_.Cliente, get_.Fecha)
if get_data in data:
get_list = data[get_data]
get_list.append(val)
else:
data.setdefault(get_data, [])
with open('DataAnalizada_new.csv', 'wb+') as filename:
header = ['Cliente','Fecha','Analisis']
writer = csv.writer(filename)
writer.writerow(header)
for val in data.keys():
writer.writerow(val + ["Stable: The client's performance was Stable"])