nor*_*ok2 0 python numpy string-formatting pandas
让我们假设我有一个 Pandas 的DataFrame:
import numpy as np
import pandas as pd
df = pd.DataFrame(
np.random.randint(0, 100, size=(10, 4)), columns=('A', 'DA', 'B', 'DB'))
Run Code Online (Sandbox Code Playgroud)
输出:
A DA B DB
0 62 87 10 39
1 56 7 81 12
2 37 26 21 44
3 56 26 42 32
4 29 45 11 9
5 11 85 4 79
6 87 31 61 90
7 5 55 26 47
8 55 94 20 84
9 52 26 72 19
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
A B
0 62±87 10±39
1 56±7 81±12
2 37±26 21±44
3 56±26 42±32
4 29±45 11±9
5 11±85 4±79
6 87±31 61±90
7 5±55 26±47
8 55±94 20±84
9 52±26 72±19
Run Code Online (Sandbox Code Playgroud)
和反之亦然。
我可以“手动”做到这一点,但我希望能以一种优雅的方式使用 Pandas 的内置插件,最终可以优雅地转换为 LaTeX(即62±87变成$62 \pm 87$)。
我一直在寻找到.apply()从从int熊猫数据帧中转换一列字符串,但它不是我清楚如何使用它用于此目的。
编辑
建议的答案似乎没有涵盖 VICEVERSA:即从A±DA符号转换回两列A和DA.
这是一种方法
In [1336]: (df.groupby(df.columns.str[-1], axis=1)
.apply(lambda x: x.astype(str).apply('±'.join, 1)))
Out[1336]:
A B
0 62±87 10±39
1 56±7 81±12
2 37±26 21±44
3 56±26 42±32
4 29±45 11±9
5 11±85 4±79
6 87±31 61±90
7 5±55 26±47
8 55±94 20±84
9 52±26 72±19
Run Code Online (Sandbox Code Playgroud)
其它的办法
In [1351]: pd.DataFrame({c: df.filter(like=c).astype(str).apply('±'.join, 1)
for c in df.columns.str[-1].unique()})
Out[1351]:
A B
0 62±87 10±39
1 56±7 81±12
2 37±26 21±44
3 56±26 42±32
4 29±45 11±9
5 11±85 4±79
6 87±31 61±90
7 5±55 26±47
8 55±94 20±84
9 52±26 72±19
Run Code Online (Sandbox Code Playgroud)
或者,也作为
In [1386]: pd.DataFrame({c: ['±'.join(v) for v in df.filter(like='A').astype(str).values]
...: for c in df.columns.str[-1].unique()})
Run Code Online (Sandbox Code Playgroud)
而且,相反的假设dff是您的字符串连接数据框
In [1357]: pd.concat([dff[c].str.split('±', expand=True).rename(columns={0:c, 1:'D'+c})
for c in dff.columns], axis=1)
Out[1357]:
A DA B DB
0 62 87 10 39
1 56 7 81 12
2 37 26 21 44
3 56 26 42 32
4 29 45 11 9
5 11 85 4 79
6 87 31 61 90
7 5 55 26 47
8 55 94 20 84
9 52 26 72 19
Run Code Online (Sandbox Code Playgroud)
细节
In [1358]: df
Out[1358]:
A DA B DB
0 62 87 10 39
1 56 7 81 12
2 37 26 21 44
3 56 26 42 32
4 29 45 11 9
5 11 85 4 79
6 87 31 61 90
7 5 55 26 47
8 55 94 20 84
9 52 26 72 19
In [1359]: dff
Out[1359]:
A B
0 62±87 10±39
1 56±7 81±12
2 37±26 21±44
3 56±26 42±32
4 29±45 11±9
5 11±85 4±79
6 87±31 61±90
7 5±55 26±47
8 55±94 20±84
9 52±26 72±19
Run Code Online (Sandbox Code Playgroud)
帮手
In [1377]: df.columns.str[-1]
Out[1377]: Index([u'A', u'A', u'B', u'B'], dtype='object')
In [1378]: df.columns.str[-1].unique()
Out[1378]: Index([u'A', u'B'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |