我用pandas使用pd.read_excel将xls文件读入
Python
我正在努力清理我的数据,但我已经离开了我的联盟.
每条记录之间都有一个空行.在示例pic中,它优于第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)
我感谢任何建议或见解!!
谢谢!
最佳答案 这是我在@Boud在评论中解释的原始解决方案.我首先在这里创建示例数据:
df = pd.DataFrame([
['record1', '10', 'date1', 'optional', 'comment'],
['', '', '', '', 'comment continued'],
['', '', '', '', ''],
['record2', '100', 'date2', '', 'comment'],
['', '', '', '', 'comment continued'],
['', '', '', '', 'comment continued'],
['', '', '', '', 'comment continued'],
['', '', '', '', ''],
['record3', '10000', 'date3', '', 'comment']],
columns=['col_A', 'col_B', 'col_C', 'col_D', 'col_F'])
df.replace('', np.nan, regex=True, inplace=True)
请注意,此处的空白应填充NaN而不是空格.基本上,首先,您可以使用dropna删除不首先使用的行.
df.dropna(axis=0, how='all', inplace=True) # drop NaN by row
然后,您可以通过以前的记录填写col_A.
new_col = []
row_name = ''
for r in df.col_A:
if not pd.isnull(r):
row_name = r
new_col.append(row_name)
df.col_A = new_col
之后,您可以通过将groupby函数应用于A列来对其他列进行分组,并通过连接字符串来聚合其他列,如下所示.
gr = df.groupby('col_A')
def join_str(x):
x = list(map(str, x))
x = [e for e in x if str(e) != 'nan']
return ' '.join(x)
gr.agg({'col_B' : join_str,
'col_C': join_str,
'col_D': join_str,
'col_F': join_str}).reset_index()