[英]Column unexpectedly dropped during Pandas Dataframe Append
下面是我的代码,它简单地分组在一起并平均行集。 为了我的一生,我不明白为什么最终结果中会删除一列。
import pandas as pd
def group_rows(dataframe1):
incr = 10
dataframe3 = pd.DataFrame()
for i in range(0,len(dataframe1.index),incr):
tmp = dataframe1[i:i+incr].mean()
dataframe3 = dataframe3.append(tmp, ignore_index=True)
print dataframe3.to_string()
group_rows(pd.read_csv('sample.csv')) # Inputs the CSV file whose snapshot is shown below
CSV文件sample.csv
是上述group_rows()
函数的输入 ,由12列和许多行组成。 此函数返回的结果有11列而不是12列。
下面是输出的快照。
上面评论中的@tmrlvi应该完全归功于此答案。 删除列的原因确实是由于其中存在非数字数据。 下面是一个代码片段,用于识别具有非数字数据的行和列,并改编自另一个SO问题 。
def is_numeric(val):
try:
val = str(val)
return float(val) and '.' in val or val.isdigit()
except ValueError:
return False
def non_numeric(dataframe, axis = 1):
dataframe1 = dataframe1.applymap(is_numeric).all(axis)
return [i for i in range(0, len(dataframe1)) if not dataframe1[i]]
代码段中的一些注释。 将axis
设置为1会返回包含非数值数据的行,而将axis
设置为0则会返回列。
我建议的策略是删除行,而不是Pandas在诸如mean()
聚合函数上默认删除列。 要删除非数字行,以下代码段很有用。
nonnum_rows = non_numeric(dataframe1)
dataframe1 = dataframe1.drop(dataframe1.index[nonnum_rows])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.