Fab*_*nna 8 python csv string pandas
我有这个'file.csv'文件用pandas读取:
Title|Tags
T1|"[Tag1,Tag2]"
T1|"[Tag1,Tag2,Tag3]"
T2|"[Tag3,Tag1]"
Run Code Online (Sandbox Code Playgroud)
运用
df = pd.read_csv('file.csv', sep='|')
Run Code Online (Sandbox Code Playgroud)
输出是:
Title Tags
0 T1 [Tag1,Tag2]
1 T1 [Tag1,Tag2,Tag3]
2 T2 [Tag3,Tag1]
Run Code Online (Sandbox Code Playgroud)
我知道该列Tags
是一个完整的字符串,因为:
In [64]: df['Tags'][0][0]
Out[64]: '['
Run Code Online (Sandbox Code Playgroud)
我需要把它读作一个字符串列表["Tag1","Tag2"]
.我尝试了这个问题中提供的解决方案,但没有运气,因为我有[
和]
字符实际搞乱事情.
期望的输出应该是:
In [64]: df['Tags'][0][0]
Out[64]: 'Tag1'
Run Code Online (Sandbox Code Playgroud)
rdm*_*ony 17
您可以使用内置的ast.literal_eval
,它适用于元组和列表
import ast\nimport pandas as pd\n\ndf = pd.DataFrame({"mytuples": ["(1,2,3)"]})\n\nprint(df.iloc[0,0])\n# >> \'(1,2,3)\'\n\ndf["mytuples"] = df["mytuples"].apply(ast.literal_eval)\n\nprint(df.iloc[0,0])\n# >> (1,2,3)\n
Run Code Online (Sandbox Code Playgroud)\n编辑:eval
应该避免!如果正在评估的字符串是,os.system(\xe2\x80\x98rm -rf /\xe2\x80\x99)
它将开始删除计算机上的所有文件(此处)。提供的ast.literal_eval
字符串或节点可能仅包含以下 Python 文字结构:字符串、字节、数字、元组、列表、字典、集合、布尔值和 None(此处)。谢谢@TrentonMcKinney :)
您可以手动拆分字符串:
>>> df['Tags'] = df.Tags.apply(lambda x: x[1:-1].split(','))
>>> df.Tags[0]
['Tag1', 'Tag2']
Run Code Online (Sandbox Code Playgroud)
我认为您可以使用 json 模块。
import json
import pandas
df = pd.read_csv('file.csv', sep='|')
df['Tags'] = df['Tags'].apply(lambda x: json.loads(x))
Run Code Online (Sandbox Code Playgroud)
因此,这将像以前一样加载您的数据框,然后将 lambda 函数应用于Tags
列中的每个项目。lambda 函数调用json.loads()
将列表的字符串表示形式转换为实际列表。
strip
您可以使用和将字符串转换为列表split
。
df_out = df.assign(Tags=df.Tags.str.strip('[]').str.split(','))
df_out.Tags[0][0]
Run Code Online (Sandbox Code Playgroud)
输出:
'Tag1'
Run Code Online (Sandbox Code Playgroud)
要么
df.Tags=df.Tags.str[1:-1].str.split(',').tolist()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13142 次 |
最近记录: |