在Pandas Dataframe Append期间意外删除了列

时间:2017-03-30 07:39:34

标签: python pandas

下面是我的代码,它只是组合在一起并平均行集。对于我的生活,我无法理解为什么在最终结果中删除了一列。

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列。

channels.csv snapshot

输出的快照如下所示。

Output from function

1 个答案:

答案 0 :(得分:0)

上述评论中的{p> @tmrlvi完全值得赞扬。列丢失的原因确实是由于其中存在非数字数据。下面是一个代码段,用于标识从another SO question改编的非数字数据的行和列。

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将返回包含非数字数据的行,而将其设置为0将返回列。

我建议的策略是放弃行而不是Pandas'在mean()等聚合函数上删除列的默认值。要删除非数字行,以下代码段很有用。

nonnum_rows = non_numeric(dataframe1)
dataframe1 = dataframe1.drop(dataframe1.index[nonnum_rows])