我有一个脚本,可以整理来自其他数据帧的标签集,将它们转换为逗号分隔的字符串,并将所有这些添加到新的数据帧中。如果我使用 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/