【发布时间】:2021-09-10 08:11:42
【问题描述】:
这是我的第一个问题,如果我做错了什么,请多多包涵:) 我正在处理 2018、2019、2020 和 2021 年的数据集。 (数据集每天都有一个文件,我已经手动检查了文件) 我试图通过 Groupby 和 datetime 将一些值与 pandas 相加。 最终目标是获得整个数据集每天的总和值。 出于某种原因,2020 年每个月都跳过第四个,我不知道为什么。 我已经搜索了 stackoverflow、datacamp 和其他几个小时,但没有解决方案。 现在我得试着问问你们。
我的代码首先列出了我文件夹中所有文件名的列表。 之后我替换“。”使用“:”,所以我可以将日期转换为 datetime64[ns] (文件中有不同的日期格式) 该代码将日期附加到列表中并将它们设置在列中。 通过 concat 在单个数据框中返回文件。 在此之后,我正在创建一个新列,在其中查找另一列中的一些单词。这个新列用于对数据框进行排序。我为此使用 .loc。 然后我 groupby.dt.date 和 .sum 那么如果一个日期的值为零,我需要它显示所以我使用 .asfreq("D") 和 .fillna(0)
一切都很好,但每隔 4 天(2020 年 4 月 1 日、2020 年 4 月 2 日、2020 年 4 月 3 日、2020 年 4 月 4 日、2020 年 4 月 5 日等)丢失。 但是为什么! :) (文件在那里。如果我自己拿所有文件,那一切都很好。值在那里。)
def FileList(): #Creates a list with all the files
CSVFileList = []
FilePath = 'Data/'
FileDirectoryList = os.listdir(FilePath)
for i in FileDirectoryList:
if(i[-3:] == "CSV"):
CSVFileList.append(i)
return CSVFileList
def Concat(filelist): #Concat all the files in the list from FileList
columns_names = ["Order_ID", "Dato", "Varenummer", "Varenavn", "Quantity", "Pris", "Pris_Sum", "Tilbehør", "col1", "col2"]
dflist = []
for i in filelist:
df = pd.read_csv("Data/"+i, delimiter = ";", names = columns_names)
DatoList = []
for i in df["Dato"]:
u = i.replace(".",":")
DatoList.append(u)
df["Dato"] = DatoList
df['Dato'] = pd.to_datetime(df['Dato']) #Convert date's to Datetime64[ns]
dflist.append(df)
dataframe = pd.concat(dflist)
return dataframe
def BestillingDF(filename):
df = filename
#New Vare_Beskrivelse
Vare_navn = []
Varenavn = df["Varenavn"]
for i in Varenavn:
i = str(i)
i = i.lower()
if "spareribs" in i:
Vare_navn.append("Spareribs")
elif "salat" in i:
Vare_navn.append("Salat")
elif "pommes" in i:
Vare_navn.append("Pommes Frites")
else:
Vare_navn.append("")
df["Vare_Navn"] = Vare_navn
Spareribs_Vægt_List = []
spareribsvægt = bi.Spareribs_Vægt() #Gets a value from a dict in another file
for i in df["Varenavn"]:
if i not in spareribsvægt:
Spareribs_Vægt_List.append(0)
else:
Spareribs_Vægt_List.append(spareribsvægt[i])
df["Spareribs_Vægt_Kuvert"] = Spareribs_Vægt_List
df["Spareribs_Vægt_[Q*K]"] = df["Quantity"] * df["Spareribs_Vægt_Kuvert"]
return df
def Spareribs_A_Day(filename):
data = BestillingDF(filename)
spare = data.loc[data["Vare_Navn"] == "Spareribs"] #Sorts the dataframe
s = spare.groupby([spare['Dato'].dt.date])['Spareribs_Vægt_Kuvert'].sum() #Groups the series by date/day and sums the value
t = s.asfreq('D') #Shows the zero values (NaN)
df = pd.DataFrame(t)
df['Spareribs_Vægt_Kuvert'] = df['Spareribs_Vægt_Kuvert'].fillna(0) #Fills the NAN by zero
return df
def main():
filelist = FileList()
concat_DF = Concat(filelist)
ribs = Spareribs_A_Day(concat_DF)
print(ribs.head())
main()
我不是 python 或编码方面的冠军。但我希望你们无论如何都能帮助我:) the code result
【问题讨论】:
-
包含示例数据作为文本和预期输出:stackoverflow.com/questions/20109391/…
-
我们需要查看没有出现在输出中的日期列值的示例,否则我们只是在猜测出了什么问题。
标签: python pandas datetime group-by