【发布时间】:2020-11-24 18:33:35
【问题描述】:
我有一个来自here 的示例excel 文件data2.xlsx,它有一个Sheet1,如下所示:
预处理:
2018, 2019, 2020, num 的列是object 类型,我需要将其转换为浮点数:
cols = ['2018', '2019', '2020', 'num']
df[cols].replace('--', np.nan, regex=True).astype(float)
我还需要从bj, sh, gz, sz 和2019-bj-price-quantity, 2019-sh-price-quantity, 2019-gz-price-quantity, 2019-sz-price-quantity 中提取城市名称
pattern = '|'.join(['2019-', '-price-quantity'])
df['city'] = df['city'].str.replace(pattern, '')
最后我需要为每个城市提取nums 中的price 和quantity,并像这样重塑一个新的数据框:
我怎么能在 pandas 中做到这一点?谢谢。
更新:
df = pd.read_excel('./data2.xlsx', sheet_name = 'Sheet1', header = None)
df.groupby(df.iloc[:, 0].isna().cumsum()).transform('first')
输出:
0 1 2 3 4
0 2019-bj-price-quantity 2018.0 2019.0 2020.0 num
1 2019-bj-price-quantity 2018.0 2019.0 2020.0 num
2 2019-bj-price-quantity 2018.0 2019.0 2020.0 num
3 2019-bj-price-quantity 2018.0 2019.0 2020.0 num
4 2019-sh-price-quantity 2018.0 2019.0 2020.0 num
5 2019-sh-price-quantity 2018.0 2019.0 2020.0 num
6 2019-sh-price-quantity 2018.0 2019.0 2020.0 num
7 2019-sh-price-quantity 2018.0 2019.0 2020.0 num
8 2019-sh-price-quantity 2018.0 2019.0 2020.0 num
9 NaN NaN NaN NaN NaN
10 2019-gz-price-quantity 2018.0 2019.0 2020.0 num
11 2019-gz-price-quantity 2018.0 2019.0 2020.0 num
12 2019-gz-price-quantity 2018.0 2019.0 2020.0 num
13 2019-gz-price-quantity 2018.0 2019.0 2020.0 num
14 2019-gz-price-quantity 2018.0 2019.0 2020.0 num
15 NaN NaN NaN NaN NaN
16 2019-sz-price-quantity 2018.0 2019.0 2020.0 num
17 2019-sz-price-quantity 2018.0 2019.0 2020.0 num
18 2019-sz-price-quantity 2018.0 2019.0 2020.0 num
19 2019-sz-price-quantity 2018.0 2019.0 2020.0 num
20 2019-sz-price-quantity 2018.0 2019.0 2020.0 num
参考相关:Read dataframe split by nan rows and reshape them into multiple dataframes in Python
【问题讨论】:
-
请检查我问题末尾的参考链接,jezrael 提供了很酷的解决方案来阅读
Sheet1。
标签: python-3.x pandas dataframe openpyxl