python - 修改从csv文件导入的pandas数据框

标签 python pandas csv

我有一个从 csv 文件导入的大型数据库(使用 pd.read_csv),以下是它在 csv 文件中的外观:

      0       1       2
0   Milan   Draw    Juventus
1    2.47    3.24    3.03
2    2.45    3.23    3.06
0   Napoli  Draw    Parma
1    1.45    4.41    7.38
2    1.45    4.40    7.36
3    1.46    4.39    7.33
4    1.47    4.33    7.14
5    1.47    4.33    7.13
6    1.47    4.34    7.10
7    1.43    4.54    7.70
0   Fiorentina  Draw    Pisa
1    2.86    3.50    2.45
2    2.92    3.51    2.40
3    3.14    3.55    2.25
4    2.79    3.45    2.61

我需要数据框如下所示:

      0         1         2       3       4
0   Milan   Juventus     2.47    3.24    3.03
1   Milan   Juventus     2.45    3.23    3.06
2   Napoli  Parma       1.45     4.41    7.38
3   Napoli  Parma       1.45     4.40    7.36
4   Napoli  Parma       1.46     4.39    7.33
5   Napoli  Parma       1.47     4.33    7.14
6   Napoli  Parma       1.47     4.33    7.13
7   Napoli  Parma       1.47     4.34    7.10
8   Napoli  Parma       1.43     4.54    7.70
9   Fiorentina  Pisa     2.86    3.50    2.45
10  Fiorentina  Pisa     2.92    3.51    2.40
11  Fiorentina  Pisa     3.14    3.55    2.25
12  Fiorentina  Pisa     2.79    3.45    2.61

使用公式在 Excel 中执行此操作非常容易,但我希望能够在 Python 中执行此操作,因为 csv 文件非常大,因此使用 pandas 进行管理速度更快,但我不知道是否是这样可能以及如何做到...谢谢!

按照建议进行操作 df=pd.read_csv(r"G:\PLUTO\odds2.csv",sep=",") 得到了这个

   Unnamed: 0           0     1         2
0            0       Milan  Draw  Juventus
1            1        2.88  3.58      2.46
2            2        2.84  3.56       2.5
3            0      Napoli  Draw     Parma
4            1        2.44  3.35      3.08
5            2         2.5   3.3      3.03
6            3        2.48  3.31      3.05
7            4        2.49   3.3      3.05
8            5        2.46  3.38      3.02
9            6        2.49  3.37      2.99
10           7        2.48   3.4      2.98
11           0  Fiorentina  Draw      Pisa
12           1        3.05  3.23      2.53
13           2        3.04  3.24      2.53
14           3        3.22  3.25      2.41
15           4        3.23  3.24      2.41

两种方法都可以在 read-csv 中添加“index_col=0”:

df = pd.read_csv(r"G:\PLUTO\odds.csv", sep=",", index_col=0)

谢谢两位!

最佳答案

这里有一种方法可以满足您的问题:

df = pd.read_csv('eestlane.txt', sep=r"\s+")
df = df.reset_index().rename(columns={'index':'zero_for_names'})
df[['new1','new2']] = df.loc[df['zero_for_names'] == 0, ['0','1']].reindex(df.index, method='ffill')
df = df[df['zero_for_names'] != 0].drop(columns='zero_for_names').reset_index(drop = True)
df=df[['new1','new2','0','1','2']]
df.columns=[str(i) for i in range(len(df.columns))]

输出:

             0     1     2     3     4
0        Milan  Draw  2.47  3.24  3.03
1        Milan  Draw  2.45  3.23  3.06
2       Napoli  Draw  1.45  4.41  7.38
3       Napoli  Draw  1.45  4.40  7.36
4       Napoli  Draw  1.46  4.39  7.33
5       Napoli  Draw  1.47  4.33  7.14
6       Napoli  Draw  1.47  4.33  7.13
7       Napoli  Draw  1.47  4.34  7.10
8       Napoli  Draw  1.43  4.54  7.70
9   Fiorentina  Draw  2.86  3.50  2.45
10  Fiorentina  Draw  2.92  3.51  2.40
11  Fiorentina  Draw  3.14  3.55  2.25
12  Fiorentina  Draw  2.79  3.45  2.61

说明:

  • 使用 read_csv 获取 3 列数据框,其索引仅包含具有名称的行的 0
  • 使用 reset_index 获取没有重复项的索引,并使用 rename 将原始索引更改为名为 zero_for_names 的列
  • 创建两个新列 new1, new2 并在 zero_for_names 上使用屏蔽以及 reindex 及其 ffill 方法arg 将这些列准备为问题中指定的目标输出的前两列
  • 使用 zero_for_names 过滤掉原始名称行,然后删除此列并使用 reset_index 获取没有间隙的新索引
  • 将列重新排列为所需的顺序
  • 更新 df.columns 以匹配问题中显示的所需列名称(整数作为字符串)。

关于python - 修改从csv文件导入的pandas数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74902783/

相关文章:

python - Pandas 数据帧如何存储在内存中?

scala - Spark 2.1.0 结构流与本地 CSV 文件

csv - PowerShell Get-ADUser-属性计数

解析 .csv 文件时的 Javascript 编码问题

Python k-means 算法

python - 如何根据列条件的首次出现执行 groupby 并删除重复项?

python - Heroku 中的客户端请求中断

python-3.x - pandas dataframe 中这一行的输出表示什么?

python - 如何将经过训练的卷积网络(CNN)转换为检测器?

python - 广播 NumPy 数组时实际发生了什么