python - Pandas:为什么我的标题被插入到数据框的第一行?

标签 python pandas dataframe jupyter-notebook

我有一个脚本,可以整理来自其他数据帧的标签集,将它们转换为逗号分隔的字符串,并将所有这些添加到新的数据帧中。如果我使用 pd.read_csv 生成数据帧,第一个条目就是我期望的内容。但是,如果我使用 df_empty 脚本(如下),那么我会得到第一行中标题的副本,而不是我想要的数据。我所做的唯一区别是生成一个新的数据帧而不是加载一个。

resultData = pd.read_csv() 读取包含以下 header 且无附加信息的 .csv 文件:

Sheet, Cause, Initiator, Group, Effects

df_empty脚本如下:

def df_empty(columns, dtypes, index=None):
    assert len(columns)==len(dtypes)
    df = pd.DataFrame(index=index)
    for c,d in zip(columns, dtypes):
        df[c] = pd.Series(dtype=d)
    return df

# https://stackoverflow.com/a/48374031    
# Usage: df = df_empty(['a', 'b'], dtypes=[np.int64, np.int64])

我的脚本包含以下行来创建数据框:

resultData = df_empty(['Sheet','Cause','Initiator','Group','Effects'],[np.str,np.int64,np.str,np.str,np.str])

我还使用了以下内容,没有任何区别:

resultData = df_empty(['Sheet','Cause','Initiator','Group','Effects'],['object','int64','object','object','object'])

我整理数据并将其添加到我的数据框的脚本如下:

data = {'Sheet': sheetNum, 'Cause': causeNum, 'Initiator': initTag, 'Group': grp, 'Effects': effectStr}
count = len(resultData)
resultData.at[count,:] = data

当我运行 display(data) 时,我在 Jupyter 中得到以下内容:

{'Sheet': '0001',
 'Cause': 1,
 'Initiator': 'Tag_I1',
 'Group': 'DIG',
 'Effects': 'Tag_O1, Tag_O2,...'}

我想通过这两个选项看到什么/读取 csv 时得到什么:

+-------+-------+-----------+-------+--------------------+
| Sheet | Cause | Initiator | Group |      Effects       |
+-------+-------+-----------+-------+--------------------+
|  0001 |     1 | Tag_I1    | DIG   | Tag_O1, Tag_O2,... |
|  0001 |     2 | Tag_I2    | DIG   | Tag_O2, Tag_04,... |
+-------+-------+-----------+-------+--------------------+

使用df_empty生成数据帧时看到的内容:

+-------+-------+-----------+-------+--------------------+
| Sheet | Cause | Initiator | Group |      Effects       |
+-------+-------+-----------+-------+--------------------+
| Sheet | Cause | Initiator | Group | Effects            |
| 0001  | 2     | Tag_I2    | DIG   | Tag_O2, Tag_04,... |
+-------+-------+-----------+-------+--------------------+

关于什么可能导致生成的数据框将我的标题复制到第一行以及我是否可以不必读取其他空的 csv 有什么想法吗?

谢谢!

最佳答案

为什么?因为您已将第一行作为数据插入。使用第一行作为标题的神奇行为是在 read_csv() 中,如果您在不使用 read_csv 的情况下创建数据框,则不会对第一行进行特殊处理。

解决方案?插入到 df_empty 生成的数据帧时跳过第一行。

关于python - Pandas:为什么我的标题被插入到数据框的第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54015631/

相关文章:

python - 如何在 django 的日历应用程序中找到 "week"?

python - 用 numpy 减少循环

python - 数据框的面积图

python - 在numpy中四舍五入到有效数字

Python ID3 标签、元组和字符串格式问题

python - 从tweets json格式文件解析的有效方法

python - 根据行中的值合并 Pandas 数据框

python - 如何在 Pandas Dataframe 上分组后进行条件计数?

python - 考虑行和标题从数据框中选择值

r - 如何转换通用数据框?