查找具有特定值的单元格并替换其值

时间:2020-07-15 13:26:34

标签: python pandas csv

使用大熊猫,我创建了一个包含2列的csv文件,并将数据保存到这些列中。像这样的东西:

fist                                      second
{'value': 2}                              {'name': 'f'}
{'value': 2}                              {'name': 'h'}
{"value": {"data": {"n": 2, "m":"f"}}}    {'name': 'h'}
...

是否有办法查找第一列包含“数据”的所有行,并且如果有的话,仅将其值保留在该单元格中?我的意思是可以将我的第三行更改为:

{"value": {"data": {"n": 2, "m":"f"}}}    {'name': 'h'}

类似这样:

{"data": {"n": 2, "m":"f"}}    {'name': 'h'}

并将所有不包含data的其他单元格的值删除或替换为-之类的? 所以我的csv文件将如下所示:

fist                                      second
-                                         {'name': 'f'}
-                                         {'name': 'h'}
{"data": {"n": 2, "m":"f"}}               {'name': 'h'}
...

这是我的代码:

import json
import pandas as pd

result = []
for line in open('file.json', 'r'):
    result.append(json.loads(line))

df = pd.DataFrame(result)
print(df)

df.to_csv('document.csv')

f = pd.read_csv("document.csv")
keep_col = ['first', 'second']
new_f = f[keep_col]
new_f.to_csv("newFile.csv", index=False)

2 个答案:

答案 0 :(得分:0)

这是我的简短示例:

df = pd.DataFrame({
    'first' : [{'value': 2}, {'value': 2}, {"value": {"data": {"n": 2, "m":"f"}}}]
    ,'secound' : [{'name': 'f'}, {'name': 'h'},{'name': 'h'}]
})

a = pd.DataFrame(df["first"].tolist())
a[~a["value"].str.contains("data",regex=False).fillna(False)] = "-"
df["first"] = a.value
  • 第一步是删除“值”字段。之后是值字段
  • 如果新字段包含单词“ data”,则该字段设置为true;所有其他字段均为False,数字字段的值为NaN,将其替换为False。整个结果被否定并替换为“-”
  • 最后一步是覆盖原始数据框中的列。

答案 1 :(得分:0)

类似的事情可能会起作用。

first=[{'value': 2} , {'value': 2} , {"value": {"data": {"n": 2, "m":"f"}}}, {"data": {"n": 2, "m":"f"}}]
second=[{'name': 'f'}, {'name': 'h'}, {'name': 'h'}, {'name': 'h'}]

df = pd.DataFrame({'first': first,
                   'second': second})

f = lambda x: x.get('value', x) if isinstance(x, dict) else np.nan
df['first'] = df['first'].apply(f)
df['first'][~df["first"].str.contains("data",regex=False).fillna(False)] = "-"
print(df)
                          first         second
0  -                             {'name': 'f'}
1  -                             {'name': 'h'}
2  {'data': {'n': 2, 'm': 'f'}}  {'name': 'h'}
3  {'data': {'n': 2, 'm': 'f'}}  {'name': 'h'}
相关问题