您好,我正在使用 pandas,我需要将一列拆分为不同的列,问题是某些 csv 文件第一列中可能没有 4 封电子邮件。
示例
身份证 | 姓名 | 电子邮件 |
---|---|---|
1 | 名字1 | [email protected]、[email protected]、[email protected]、[email protected] |
2 | 名字2 | [email protected] |
3 | 名字3 |
但是我正在运行以下代码
df[['email1', 'email2','email3','email4']] = tenant.emails.str.split(',',1, expand=True)
告诉我这个错误
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/pandas/core/indexers/utils.py", line 401, in check_key_length
raise ValueError("Columns must be same length as key")
我需要什么
身份证 | 姓名 | 电子邮件1 | 电子邮件2 | 电子邮件3. | 电子邮件4 |
---|---|---|---|---|---|
1 | 名字1 | [email protected]。 | [email protected] | [email protected] | [email protected] |
2 | 名字2 | [email protected] | |||
3 | 名字3 |
有什么想法吗?问候
即使没有足够的值,我也需要将字符串分成多列。
Series.str.split
(扩展到多列)+ pd.concat
:
emails = df['EMAILS'].str.split(r',\s*', expand=True)
emails.columns = 'Email' + (emails.columns + 1).astype(str)
out_df = pd.concat([df[['ID', 'NAME']], emails], axis=1)
ID NAME Email1 Email2 Email3 Email4
0 1 name 1 [email protected] [email protected] [email protected] [email protected]
1 2 name 2 [email protected] None None None
2 3 name 3 NaN NaN NaN NaN