使用pandas包使用python清理Excel数据

Tom*_*mmy 5 python numpy python-3.x pandas

我已经使用pd.read_excel使用熊猫将xls文件读入Python

我正在尝试清理数据,但我走出了困境。

每个记录之间都有一个空白行。在示例图片中,它是excel第4、9和11行。

有一个注释列,在示例中(请参阅链接)指定为“ col_F”。每个记录都有至少一个包含文本的单元格。创建此xls文件的人将较长的注释拆分为多个单元格。

我想将col_F中用于特定记录的所有数据连接到一个单元格中。

一旦弄清楚如何正确连接col_F,我还将修剪空白记录。

我正在使用Python 3.5.0,numpy 1.12.0和pandas 0.19.2

这是我到目前为止的内容:

import numpy as np
import pandas as pd

data = pd.read_excel("C:/blah/blahblah/file.xls", header=0, nrows=10000)
df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)

我感谢任何建议或见解!

谢谢!

原始数据的外观: 在此处输入图片说明

更新:这是我加载到Python中时数据的外观 原始数据读入python

这就是我期望的结果: 我希望数据框在完成后的样子

Tom*_*mmy 3

弄清楚了!!!强烈感谢诺福克数据科学俱乐部的帮助。

导入 pandas、sqlite 和 os 包

import pandas as pd
import sqlite3
import os
Run Code Online (Sandbox Code Playgroud)

指定文件路径和文件名

filepath = "C:/blah/blahblah/randomfolder"
filename = "raw_data.xlsx"
filePathFileName = filepath + "/" + filename
outputPathFileName = filepath + "/cleaned_" + filename
outputFileName = "cleaned_" + filename
Run Code Online (Sandbox Code Playgroud)

使用 pandas 读取 Excel 文件。

df = pd.read_excel(filePathFileName, header=0, nrows=14)
Run Code Online (Sandbox Code Playgroud)

删除空白行

df.dropna(how='all', inplace=True)
Run Code Online (Sandbox Code Playgroud)

填补我们数据中的空白

df.ffill(inplace=True)
Run Code Online (Sandbox Code Playgroud)

创建一个sqlite数据库和一个到sqlite数据库的连接

con = sqlite3.connect(":memory:")
con.isolation_level = None
cur = con.cursor()
Run Code Online (Sandbox Code Playgroud)

在 sqlite 中为我们的数据创建一个表

df.to_sql('example_data', con)
Run Code Online (Sandbox Code Playgroud)

SQL 查询来聚合我们的数据

df_pdsql = pd.read_sql_query("SELECT col_A, col_B, col_C, col_D, col_E, GROUP_CONCAT(col_F, ' ') AS col_F FROM example_data GROUP BY col_A", con)
Run Code Online (Sandbox Code Playgroud)

将我们的 df 写入 xlsx 文件

df_pdsql.to_excel(outputPathFileName, sheet_name='test', index=False)
Run Code Online (Sandbox Code Playgroud)

让用户知道文件所在位置

print("Your new file is located in: " + outputPathFileName)
Run Code Online (Sandbox Code Playgroud)

与 sqlite 数据库的紧密连接

con.close()
Run Code Online (Sandbox Code Playgroud)