python - 将第一行和标题与熊猫组合
问题描述
我正在尝试在 Python 中复制我在 R 中制作的代码,但是当我尝试修复我的标头时遇到了困难。我想合并标题和第一行,但我似乎无法让它工作。
我的数据目前如下所示:
Acronym Project Number Title Dates Unnamed: 4 Unnamed: 5
0 NaN NaN NaN Start date Duration Number of Participants
1 YoYo 5678 blabla 01-01-2020 36 4
2 SPY 1452 blabla 06-03-2018 12 6
3 NoNo 6280 blabla 02-05-2019 48 8
4 MaGiK 2749 blabla 01-05-2016 12 9
我的数据标题分布在两行中。前三个标题是应有的。但是,从第 4 列开始,我的列名位于第二行。简单地组合标题和第一行是行不通的,因为某些列(如第 4 列)在标题和第一行中都有值。
理想情况下,我想做的是将标题保留在前三列中,并将第一行中的值用作第 4 列以后的标题,这样它就变成了:
Acronym | Project Number | Title | Start date | Duration | Number of Participants
在 R 中,这将通过
Projects <- Projects %>%
set_names(c(names(Projects)[1:3], as.character(.[1,])[4:6])) %>%
rownames_to_column("index") %>%
filter(index != 1 ) %>%
select(-index)
基于这个问题,我在 Python 中尝试了这个
Projects_clean.columns = np.concatenate([Projects_clean.iloc[0, :2], Projects_clean.columns[0:3]])
和
Projects_clean.columns = np.append(Projects_clean.iloc[0,:2], Projects_clean.columns[0:3])
但这会返回
"values have {new} elements".format(old=old_len, new=new_len)
Length mismatch: Expected axis has 24 elements, new values have 10 elements
(根据我的实际数据)。显然,我的新数据与旧数据的列数不同。我究竟做错了什么?
解决方案
在第 3 个值之后转换前 3 列名称和第一行的所有数据:
Projects_clean.columns = (Projects_clean.columns[:3].tolist() +
Projects_clean.iloc[0, 3:].tolist())
或者:
Projects_clean.columns = np.concatenate([Projects_clean.columns[:3],
Projects_clean.iloc[0, 3:]])
然后Anf:
Projects_clean = Projects_clean.iloc[1:]
print (Projects_clean)
Acronym Project Number Title Start date Duration Number of Participants
1 YoYo 5678.0 blabla 01-01-2020 36 4
2 SPY 1452.0 blabla 06-03-2018 12 6
3 NoNo 6280.0 blabla 02-05-2019 48 8
4 MaGiK 2749.0 blabla 01-05-2016 12 9
如果可能的话MultiIndex
,通过参数创建前 2 行header=[0,1]
,read_csv
然后使用:
Projects_clean = pd.read_csv(file, header=[0,1])
Projects_clean.columns = (Projects_clean.columns.get_level_values(0)[:3].tolist() +
Projects_clean.columns.get_level_values(1)[3:].tolist())
print (Projects_clean)
Acronym Project Number Title Start date Duration \
1 YoYo 5678 blabla 01-01-2020 36
2 SPY 1452 blabla 06-03-2018 12
3 NoNo 6280 blabla 02-05-2019 48
4 MaGiK 2749 blabla 01-05-2016 12
Number of Participants
1 4
2 6
3 8
4 9
推荐阅读
- python-3.x - 无法使用 Python 3.7.5 在 Ubuntu 18.04 上安装 grpcio?
- java - 使用 DOM 在 Java 中将 XML 转换为 csv
- java - 子阵列最大乘积的 Kadenes 算法。帮我找出我的代码中的错误
- python - 从其他文件导入类时,tkinter checkbutton不显示正确的值
- python - 替换 os.getcwd() 中的斜杠“\”
- c# - Blazor WebAssembly - appsettings.json 在注册服务时作为依赖项
- python - 在带有字符串和列表列的 pandas 列上运行函数
- python - 如何使用python计算总列
- android - 无法初始化表情符号紧凑库,找不到 R.array.com_google_android_gms_fonts_certs
- android-studio - Flutter:当你离开屏幕或按下返回时,你如何摆脱一个小部件?